假设我们有多个复杂的字典,格式不同,有没有办法以自动方式提取所有值?
例如:
a = {1:2,3:4,4:{1:5}}
a.values()
[2,4,{1:5}]
但我想要的是以下内容:
[2,4,5]
如何管理以下字典的案例:
b = {1:2,3:4,5:[{6:7,8:9},{10:11}]}
输出:
[2,4,7,9,11]
答案 0 :(得分:2)
使用isinstance
功能检查项目的类型。
>>> def extract(d):
for i,j in d.items():
if isinstance(j, dict):
for x in j.values():
yield x
else:
yield j
>>> list(extract({1:2,3:4,4:{1:5}}))
[2, 4, 5]
<强>更新强>
>>> def extract(d):
for i,j in d.items():
if isinstance(j, dict):
for x in extract(j):
yield x
else:
yield j
>>> list(extract({1:2,3:4,4:{1:{5:6}}}))
[2, 4, 6]
最终更新:
>>> def extract(d):
for i,j in d.items():
if isinstance(j, dict):
for x in extract(j):
yield x
elif isinstance(j, list):
for k in j:
if isinstance(k, dict):
for l in extract(k):
yield l
else:
yield j
>>> list(extract({1:2,3:4,5:[{6:7,8:9},{10:11}]}))
[2, 4, 9, 7, 11]