检查字典条目到另一个字典,添加条目中的某个键:值对

时间:2016-05-17 04:09:01

标签: python dictionary

说我有两个词典:

dict1 = [{file:2015a, instrument:NES, gain:23}, {file:2015b, instrument:NES, gain:26}, {file:2015d, instrument:NES, gain:25}]

dict2=  [{file:2015a, instrument:NES, gain:3333}, {file:2015c, instrument:PS2, gain:26}, {file:2015d, instrument:NES, gain:4545}]

我想做的是从dict2获取所有使用instrument = PS2的字典条目并将它们放在dict1中,忽略dict2中的所有其他条目。

或者只是创建一个新词典dict3,其中包含dict1中所有具有乐器的条目:NES以及dict2中包含乐器的所有条目:PS2。

最简单的方法是什么?

3 个答案:

答案 0 :(得分:0)

它们是列表中的字典。

>>> dict1=[{'file':'2015a', 'instrument':'NES', 'gain':23}, {'file':'2015b', 'instrument':'NES', 'gain':26}, {'file':'2015d', 'instrument':'NES', 'gain':25}]
>>> dict2=[{'file':'2015a', 'instrument':'NES', 'gain':3333}, {'file':'2015c', 'instrument':'PS2', 'gain':26}, {'file':'2015d', 'instrument':'NES', 'gain':4545}]

您可以在每个列表上使用filter()并连接它们以获得最终输出:

>>> list(filter(lambda x:x['instrument']=='NES', dict1))+list(filter(lambda x:x['instrument']=='PS2', dict2))
[{'instrument': 'NES', 'gain': 23, 'file': '2015a'}, {'instrument': 'NES', 'gain': 26, 'file': '2015b'}, {'instrument': 'NES', 'gain': 25, 'file': '2015d'}, {'instrument': 'PS2', 'gain': 26, 'file': '2015c'}]
>>> 

以下是个别输出:

>>> list(filter(lambda x:x['instrument']=='NES', dict1))
[{'instrument': 'NES', 'gain': 23, 'file': '2015a'}, {'instrument': 'NES', 'gain': 26, 'file': '2015b'}, {'instrument': 'NES', 'gain': 25, 'file': '2015d'}]
>>> list(filter(lambda x:x['instrument']=='PS2', dict2))
[{'instrument': 'PS2', 'gain': 26, 'file': '2015c'}]

答案 1 :(得分:0)

这些是列表,以字典为元素。

假设,如果密钥Shape的值为dict2,您希望将dict1的词典附加到instrument

PS2

另一方面,for d in dict2: if d.get('instrument') == 'PS2': dict1.append(d) 不是名单的好名字。

示例:

dict[1-2]

答案 2 :(得分:0)

除了上述答案,您还可以这样做:

tmp_lst = [i for i in dict2 for k,v in i.items() if (k,v)== ('instrument','PS2')]
print dict1+tmp_lst

将返回

[{'instrument': 'NES', 'gain': '23', 'file': '2015a'}, {'instrument': 'NES', 'gain': '26', 'file': '2015b'}, {'instrument': 'NES', 'gain': '25', 'file': '2015d'}, {'instrument': 'PS2', 'gain': 26, 'file': '2015c'}]