说我有两个词典:
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。
最简单的方法是什么?
答案 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'}]