首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查dict值是否作为另一个dict中的键存在。

检查dict值是否作为另一个dict中的键存在。
EN

Stack Overflow用户
提问于 2018-02-14 11:02:41
回答 5查看 1.2K关注 0票数 1

我有两本字典:

代码语言:javascript
复制
concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}

我还返回了凸条中具有最大长度值的键:

代码语言:javascript
复制
max_lens = [1, 6, 7, 8, 9, 10, 11]

对于max_lens中的每个数字,我想检查它在concave 中不作为键存在--它在convex中的值在concave中作为键存在。

所以在这个例子中,'1‘将满足这个条件,因为它不作为键包含在concave中,但是它在convex中的值是(即2、34和5)。

我试图弄清楚如何使用for循环/if语句来完成这个任务:

代码语言:javascript
复制
for i in enumerate(max_lens):
    if i not in concave:
        for k,v in convex.items():
            for j in v:

这大概是我在完全困惑之前所得到的。除了使用多个for循环和if语句之外,还必须有更简单的方法来完成这些操作吗?

我有点像蟒蛇,很抱歉,如果这让人感到困惑的话!

EN

回答 5

Stack Overflow用户

发布于 2018-02-14 11:08:15

我想我理解了(为了记录起见,我更喜欢显式的concave.keys())

代码语言:javascript
复制
result_dict = {}
for convex_key in max_lens:
    result_dict[convex_key] = convex_key not in concave.keys() \
                              and all(convex_val in concave.keys() 
                                      for convex_val in convex[convex_key])

编辑(见注释)

代码语言:javascript
复制
for convex_key in max_lens:
    if convex_key not in concave.keys() and \
           all(convex_val in concave.keys() for convex_val in convex[convex_key]):
        top_face = convex_key
        break
票数 2
EN

Stack Overflow用户

发布于 2018-02-14 11:16:32

将此问题拼写为步骤总是有帮助的:

  • 循环遍历max_lens中每个长度的max_lens
  • 检查l是否存在于concave中,而存在于convex中。这里需要将这两个条件结合起来。如果两种方法都失败了,就不要继续。
  • 如果接受上述两个条件,请检查来自convex[l]的所有值是否都存在于concave中。
  • 如果代码到达这里时没有任何问题,那么所有条件都会得到满足。

演示:

代码语言:javascript
复制
concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}

max_lens = [1, 6, 7, 8, 9, 10, 11]

for l in max_lens:
    if l not in concave and l in convex and all(v in concave for v in convex[l]):
        print(l)

输出:

代码语言:javascript
复制
1
票数 1
EN

Stack Overflow用户

发布于 2018-02-14 11:11:12

使用简单的执行循环。

代码语言:javascript
复制
concave = {6: [2, 3, 4, 5], 2: [6], 3: [6], 4: [6], 5: [6]}
convex = {1: [2, 3, 4, 5], 2: [1, 3, 5], 3: [1, 2, 4], 4: [1, 3, 5], 5: [1, 2, 4], 6: [7, 8, 9, 10], 7: [6, 8, 10, 11], 8: [6, 7, 9, 11], 9: [6, 8, 10, 11], 10: [6, 7, 9, 11], 11: [7, 8, 9, 10]}
max_lens = [1, 6, 7, 8, 9, 10, 11]

for i in max_lens:
    if (i not in concave):   #Check if not in key.
        if convex[i] in concave.values():   #Check Value.
                print i

输出

代码语言:javascript
复制
1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48785596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档