Python-嵌套字典-提取值

时间:2020-07-04 16:48:58

标签: python dictionary nested

下面的嵌套词典存储了不同城市(北京,伦敦,里约)中各个国家/地区赢得的奥运奖牌数量。以下代码还计算了美国赢得的奖牌数量。是否有更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)

谢谢!

2 个答案:

答案 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在一天结束时只是个人喜好和您所喜欢的。