首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中检查数据时避免嵌套循环

在Python中检查数据时避免嵌套循环
EN

Stack Overflow用户
提问于 2018-08-09 04:27:10
回答 2查看 92关注 0票数 1

我有两个字典列表:

代码语言:javascript
复制
dict_list1 = [{'k1':1, 'k2':2}, {'k1':3, 'k2':4}]
dict_list2 = [{'k1':1, 'k2':2, 'k3':10}, {'k1':3, 'k2':4, 'k3':10}]

现在,对于dict_list1中的每个dict_x,我想知道在dict_list2上是否有一个dict_y,它包含来自dict_x的每个键和值。

我想不出另一种方法来做这件事:

代码语言:javascript
复制
for dict_x in dict_list1:
    for dict_y in dict_list2:
        count = len(dict_x)
        for key, val in dict_x.items():
            if key in dict_y and dict_y[key] == val:
                count -= 1
        if count == 0:
            print('YAY')
            break
EN

回答 2

Stack Overflow用户

发布于 2018-08-09 04:34:08

下面,我使用dict.items view implements set operations来检查每个d1.items()是否存在d2.items(),这样d1.items()就是d2.items()的子集

代码语言:javascript
复制
[any(d1.items() <= d2.items() for d2 in dict_list2) for d1 in dict_list1]
票数 3
EN

Stack Overflow用户

发布于 2018-08-09 04:30:11

您可以使用anyall

代码语言:javascript
复制
dict_list1 = [{'k1':1, 'k2':2}, {'k1':3, 'k2':4}]
dict_list2 = [{'k1':1, 'k2':2, 'k3':10}, {'k1':3, 'k2':4, 'k3':10}]
v = [any(all(c in i and i[c] == k for c, k in b.items()) for i in dict_list2)\
   for b in dict_list1]

输出:

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

https://stackoverflow.com/questions/51755131

复制
相关文章

相似问题

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