擅长:python、mysql、java
<p>您可以<em>将dict“展平”成dict列表,然后根据需要进行查询:</p>
<pre><code>def flatten_dict(d):
flattened = []
current = {}
for k, v in d.items():
if isinstance(v, dict):
flattened.extend(flatten_dict(v))
elif isinstance(v, list):
flattened.extend(sum((flatten_dict(v_d) for v_d in v), []))
else:
current[k] = v
if len(current) > 0:
flattened = [current] + flattened
return flattened
def values_in_flattened(flattened, key):
return list(filter(None, (d.get(key, None) for d in flattened))) or None
m = {'abc': {'bcd':[{'cde':'100','def':'200','efg':'300'},{'cde':'3000','def':'500','efg':'4000'}], 'ghi':{'mnc':[{'xyz':'8827382','mnx':'e838','wyew':'2232'}]}}}
mf = flatten_dict(m)
efg_vals = values_in_flattened(mf, 'efg')
print(mf)
print(efg_vals)
>>>
[{'xyz': '8827382', 'mnx': 'e838', 'wyew': '2232'}, {'def': '200', 'efg': '300', 'cde': '100'}, {'def': '500', 'efg': '4000', 'cde': '3000'}]
['300', '4000']
</code></pre>