Python中如何操作嵌套字典提取汇总指定键的对应值
代码问题修正及实现方案
存在的问题
- 变量命名不统一:你定义的是
new_Brunswick,后面写的new_brunswick大小写不一致,同时british_columbia、prince_edward_island等省份的字典未定义,运行会触发NameError - 数据结构用错:
canada = {xx,xx,xx}这种写法生成的是集合(Set),集合没有items()方法,调用canada.items()会直接报错。如果要存省份信息要么直接用列表,要么用省份名作key的字典。 - 变量名冲突:
sum是Python内置的求和函数,直接用作变量名会覆盖原有功能,建议改用total_pop这类自定义名称。 - 打印位置错误:
print语句写在循环内部,只会输出每次累加的中间值,要拿到最终总和需要放到循环外。
修正后的可运行代码
# 定义所有省份的信息字典 ontario = dict(capital="Toronto", largest="Toronto", population=14826276) quebec = dict(capital="Quebec City", largest="Montreal", population=8604495) nova_scotia = dict(capital="Halifax", largest='Halifax', population=992055) new_brunswick = dict(capital="Fredricton", largest='Moncton', population=789225) manitoba = dict(capital="Winnipeg", largest="Winnipeg", population=1383765) british_columbia = dict(capital="Victoria", largest="Vancouver", population=5214805) prince_edward_island = dict(capital="Charlottetown", largest="Charlottetown", population=167680) saskatchewan = dict(capital="Regina", largest="Saskatoon", population=1179844) alberta = dict(capital="Edmonton", largest="Calgary", population=4464170) newfoundland_and_labrador = dict(capital="St. John's", largest="St. John's", population=520553) # 用列表存储所有省份字典 canada_provinces = [ontario, quebec, nova_scotia, new_brunswick, manitoba, british_columbia, prince_edward_island, saskatchewan, alberta, newfoundland_and_labrador] total_pop = 0 for province in canada_provinces: if 'population' in province: total_pop += province['population'] print(f"加拿大全国总人口为:{total_pop}")
更简洁的实现
如果不想手动初始化累加变量,可以直接用生成器表达式配合内置sum函数实现,就算部分省份没有population字段也不会报错:
total_pop = sum(province.get('population', 0) for province in canada_provinces) print(total_pop)
内容的提问来源于stack exchange,提问作者jump
相关产品推荐
相关产品推荐

