python – 从两个词典创建一个新列表

这是一个关于 Python的问题.我有以下词典列表:

listA = [
          {"t": 1,"tid": 2,"gtm": 3,"c1": 4,"id": "111"},{"t": 3,"tid": 4,"c2": 5,"id": "222"},{"t": 1,"id": "333"},{"t": 5,"tid": 6,"id": "444"}
        ]

和我想要比较的词典:

dictA = {"t": 1,"gtm": 3}

我想创建一个与listA中dictA中的所有项匹配的dicts列表,并包含“id”字段:

listB = [
          {"t": 1,"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()]

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...