Доступ к значениям из словарей, вложенных в список - PullRequest
0 голосов
/ 22 ноября 2018

Первый вопрос здесь!

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, поскольку значения в 'weights' будут обновляться пользователем.

Я пробовал это:

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

Есть идеи?Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Существует несколько проблем:

  1. dict.items циклически изменяет пары ключ-значение, а не только ключи;
  2. при итерации countries_weighted вы должны использовать i.

Таким образом, вы можете изменить следующим образом:

for key, value in weights.items():
    for i in countries_weighted:
        i[key] *= value
0 голосов
/ 04 декабря 2018

Нужно только написать countries_weighted[i][key] *= weights[key] как i[key] *= weights[key].

0 голосов
/ 22 ноября 2018

Вы можете сделать это так:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...