【问题标题】:Accessing values from dictionaries nested in a list访问嵌套在列表中的字典中的值
【发布时间】:2018-11-22 16:36:17
【问题描述】:

这里是第一个问题!

countries = [{'country': 'Italy', 'size':3,'reg':9},
             {'country': 'Germany', 'size':7,'reg':1},
             {'country': 'USA', 'size':9,'reg':4},
            ]

weights = {'size' : 100, 'reg' : 30}

我正在尝试将“国家”嵌套字典中的值与“权重”字典中与匹配键关联的值相乘。我尝试了 for 循环方法,因为“权重”中的值将由用户更新。

我试过这个:

countries_weighted = copy.deepcopy(countries)

for key in weights.items():
        for i in countries_weighted:
           countries_weighted[i][key] *= weights[key]

这似乎不起作用:

-
TypeError                                 Traceback (most recent call last)
<ipython-input-52-9753dabe7648> in <module>()
     13 for key in weights.items():
     14     for i in countries_weighted:
---> 15        countries_weighted[i][key] *= weights[key]
     16 

TypeError: list indices must be integers or slices, not dict

有什么想法吗?提前致谢。

【问题讨论】:

  • for i in countries_weighted: 会将countries_weighted 中的值返回到您的变量i,而不是索引。所以在这种情况下,i 每次都会得到一个完整的字典。所以用i[key] *= weights[key] 替换countries_weighted[i][key] *= weights[key] 应该适合你。但是 Esteban Quiros 下面的代码要干净得多

标签: python python-3.x list dictionary for-loop


【解决方案1】:

你可以这样做:

countries = [{'country': 'Italy', 'size':3,'reg':9},
             {'country': 'Germany', 'size':7,'reg':1},
             {'country': 'USA', 'size':9,'reg':4},
            ]

weights = {'size' : 100, 'reg' : 30}

for country in countries:
    for key in weights.keys():
        country[key] *= weights[key]

print(countries)

【讨论】:

  • 有道理。感谢 Esteban Quiros、Dan 和 JPP 的帮助!
【解决方案2】:

有几个问题:

  1. dict.items 循环键值对,而不仅仅是键;
  2. 当您迭代 countries_weighted 时,您应该使用 i

所以你可以修改如下:

for key, value in weights.items():
    for i in countries_weighted:
        i[key] *= value

【讨论】:

    【解决方案3】:

    只需要将countries_weighted[i][key] *= weights[key]写成i[key] *= weights[key]即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 2017-08-12
      • 2013-09-29
      相关资源
      最近更新 更多