这是一个关于
Python的问题.我有以下词典列表:
listA = [
{"t": 1, "tid": 2, "gtm": 3, "c1": 4, "id": "111"},
{"t": 3, "tid": 4, "gtm": 3, "c1": 4, "c2": 5, "id": "222"},
{"t": 1, "tid": 2, "gtm": 3, "c1": 4, "c2": 5, "id": "333"},
{"t": 5, "tid": 6, "gtm": 3, "c1": 4, "c2": 5, "id": "444"}
]
和我想要比较的词典:
dictA = {"t": 1, "tid": 2, "gtm": 3}
我想创建一个与listA中dictA中的所有项匹配的dicts列表,并包含“id”字段:
listB = [
{"t": 1, "tid": 2, "gtm": 3, "id": "111"},
{"t": 1, "tid": 2, "gtm": 3, "id": "333"}
]
我试过这样做:
for k in listA:
for key, value in k.viewitems() & dictA.viewitems():
print key, value
但它匹配dictA中的任何项目.
最佳答案 您需要检查交叉口的长度,只需检查dct.viewitems()&对于任何交叉点,dictA.viewitems()将评估为True:
[dct for dct in listA if len(dct.viewitems() & dictA.viewitems()) == len(dictA)]
或者只检查一个子集,如果来自dictA的项目是每个dict的subset:
[dct for dct in listA if dictA.viewitems() <= dct.viewitems()]
或者反转寻找superset的逻辑:
[dct for dct in listA if dct.viewitems() >= dictA.viewitems()]