Python - 嵌套字典 - 提取值



下面的嵌套字典存储了不同城市(北京,伦敦,里约热内卢(的各个国家获得的奥运奖牌数量。下面的代码还计算了美国获得的奖牌数量。有没有一种更Pythonic,更干净或更有效的方式来获得该列表?

nested_d = {'Beijing':{'China':51, 'USA':36, 'Russia':22, 'Great Britain':19}, 'London':   {'USA':46, 'China':38, 'Great Britain':29, 'Russia':22}, 'Rio':{'USA':35, 'Great Britain':22, 'China':20, 'Germany':13}}
bei=nested_d["Beijing"]["USA"]
lon=nested_d["London"]["USA"]
rio=nested_d["Rio"]["USA"]
US_count.append(bei)
US_count.append(lon)
US_count.append(rio)
print(US_count)

谢谢!

索引字典,这些字典是nested_d的值(你不关心这里的键(:

nested_d = {'Beijing':{'China':51, 'USA':36, 'Russia':22, 'Great Britain':19},
'London': {'USA':46, 'China':38, 'Great Britain':29, 'Russia':22},
'Rio':{'USA':35, 'Great Britain':22, 'China':20, 'Germany':13}}
US_count = sum(v['USA'] for v in nested_d.values())
print(US_count)

给:

117

如果要考虑美国未在一个或多个词典中列出的可能性,请使用:

US_count = sum(v.get('USA', 0) for v in nested_d.values())

这将通过提供默认值来避免潜在的KeyError。 (尝试使用'Germany'而不是'USA'来查看此内容。

是的,漂亮的列表理解

>>> US_count = sum([nested_d[x]["USA"] for x in nested_d])
>>> US_count
117

编辑:sum也适用于发电机,因此sum(nested_d[x]["USA"] for x in nested_d)是等效的,但归根结底,这只是个人喜好和您满意的内容。