Oth*_*man 4 python dictionary filter
我是Python的新手,我不确定使用dict的dict是个好主意,但这是我的问题.我有一个dict的字典,我想通过内部字典的键过滤:
a ={ 'key1' : {'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]}
'key2' : {'id3' :[0,1,2] , 'id4' :[0,1,2]}
'key3' : {'id3' :[0,1,2] , 'id1' :[4,5,6]}
}
Run Code Online (Sandbox Code Playgroud)
例如,我想通过'id1'过滤以具有:
result = { 'key1' : {'id1' :[0,1,2] }
'key3' : {'id1' :[4,5,6]}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了过滤方法,我得到了所有的价值:
r = [('key1' ,{'id1' :[0,1,2] , 'id2' :[0,1,2], 'id3' :[4,5,6]})
('key3' , {'id3' :[0,1,2] , 'id1' :[4,5,6]})
]
Run Code Online (Sandbox Code Playgroud)
此外,filter方法返回一个列表,我想将格式保存为dict.
提前致谢
试试这个:
>>> { k: v['id1'] for k,v in a.items() if 'id1' in v }
{'key3': [4, 5, 6], 'key1': [0, 1, 2]}
Run Code Online (Sandbox Code Playgroud)
对于Python 2.x你可能更喜欢使用iteritems()而不是items()你仍然需要一个非常新的python(我认为是2.7)用于字典理解:对于旧的pythons使用:
dict((k, v['id1']) for k,v in a.iteritems() if 'id1' in v )
Run Code Online (Sandbox Code Playgroud)
如果你想提取多个值,那么我认为你最好完整地编写循环:
def query(data, wanted):
result = {}
for k, v in data.items():
v2 = { k2:v[k2] for k2 in wanted if k2 in v }
if v2:
result[k] = v2
return result
Run Code Online (Sandbox Code Playgroud)
赠送:
>>> query(a, ('id1', 'id2'))
{'key3': {'id1': [4, 5, 6]}, 'key1': {'id2': [0, 1, 2], 'id1': [0, 1, 2]}}
Run Code Online (Sandbox Code Playgroud)