下面的嵌套字典存储了不同城市(北京,伦敦,里约热内卢(的各个国家获得的奥运奖牌数量。下面的代码还计算了美国获得的奖牌数量。有没有一种更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)
是等效的,但归根结底,这只是个人喜好和您满意的内容。