Ну, вы можете использовать zip
для установки значения для 'a'
для каждого словаря. Что-то вроде:
for dic,val in zip(dicts,values):
dic['a'] = val
Или положить его в однострочника:
for dic,val in zip(dicts,values): dic['a'] = val
Обратите внимание, что нет никакой разницы с предыдущим фрагментом кода. Это зависит от того, что нравится вашему глазу.
Мы здесь обновление словари: мы не создаем копии и т. Д. Это важное различие, поскольку переменные, которые могут ссылаться на указанные словари, отражают изменения, которые мы делаем.
zip(..)
принимает в качестве входных данных последовательности или более итерируемых (здесь dicts
и values
) и генерирует кортежи элементов этих итерируемые. Так он испускает:
(values[0],dicts[0]), (values[1],dicts[1]), ...
Теперь мы делаем кортежа распаковке: мы унифицировать val
и dic
с одним из values
и один из dicts
. Поэтому для каждого из кортежей мы устанавливаем значение dic['a']
. Тест
консоли:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> values = [5,10,15,20]
>>> dicts = [{'a':0, 'b':0, 'c':0},
... {'a':0, 'b':0, 'c':0},
... {'a':0, 'b':0, 'c':0},
... {'a':0, 'b': 0, 'c':0}]
>>> for dic,val in zip(dicts,values): dic['a'] = val
...
>>> dicts
[{'b': 0, 'c': 0, 'a': 5}, {'b': 0, 'c': 0, 'a': 10}, {'b': 0, 'c': 0, 'a': 15}, {'b': 0, 'c': 0, 'a': 20}]
насчет '' b' и c' ключи? будут ли их значения оставаться 0? –
Ваш синтаксис для словарей был неправильным. –