下面的嵌套词典存储了不同城市(北京,伦敦,里约)中各个国家/地区赢得的奥运奖牌数量。以下代码还计算了美国赢得的奖牌数量。是否有更Pythony,更干净或更有效的方法来获取该列表?
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)
谢谢!
答案 0 :(得分:1)
索引作为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'
来查看此内容。)
答案 1 :(得分:0)
是的,很漂亮的列表理解
>>> 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)
是等效的,但是imo在一天结束时只是个人喜好和您所喜欢的。