это список, а не dict: >>> type ([{'a': 1}, {'b': 2}]) <type 'list'>
killown
Для этого действительно должен быть один лайнер, учитывая, как часто он возникает. Есть ли причина, по которой {** d for d in d_list} не поддерживается?
markemus
Ответы:
164
Это работает для словарей любой длины:
>>> result ={}>>>for d in L:... result.update(d)...>>> result
{'a':1,'c':1,'b':2,'d':2}
Это асимметрично, потому что вам нужно выбрать, что делать с повторяющимися ключами; в этом случае dict2будет перезаписан dict1. Обменяйте их на другой способ.
>>> dictlist =[{'a':1},{'b':2},{'c':1},{'d':2,'e':3}]>>> dict(kv for d in dictlist for kv in d.iteritems()){'a':1,'c':1,'b':2,'e':3,'d':2}>>>
Примечание. Я добавил вторую пару ключ / значение в последний словарь, чтобы показать, что он работает с несколькими записями. Кроме того, ключи из более поздних dict в списке будут перезаписывать тот же ключ из более раннего dict.
Ответы:
Это работает для словарей любой длины:
Как понимание :
источник
В случае Python 3.3+ есть
ChainMap
коллекция :Также см:
источник
Примечание: порядок 'b' и 'c' не соответствует вашему выводу, потому что dicts неупорядочены
если dicts может иметь более одного ключа / значения
источник
Для плоских словарей это можно сделать:
источник
Это похоже на @delnan, но предлагает возможность изменить элементы k / v (ключ / значение), и я считаю, что это более читабельно:
например, замените элементы k / v следующим образом:
распаковывает кортеж k, v из генератора словаря .items () после извлечения объекта dict из списка
источник
Это асимметрично, потому что вам нужно выбрать, что делать с повторяющимися ключами; в этом случае
dict2
будет перезаписанdict1
. Обменяйте их на другой способ.РЕДАКТИРОВАТЬ: Ах, извините, не видел этого.
Это можно сделать одним выражением:
Мне не за что за это последнее!
Однако я бы сказал, что это может быть более Pythonic (явный> неявный, плоский> вложенный), чтобы сделать это с помощью простого
for
цикла. YMMV.источник
Вы можете использовать функцию соединения из библиотеки funcy :
источник
Небольшое улучшение для ответа @dietbuddha с распаковкой словаря из PEP 448 , для меня это более читабельно, также оно быстрее :
Но имейте в виду, что это работает только с версиями Python 3.5+.
источник
Примечание. Я добавил вторую пару ключ / значение в последний словарь, чтобы показать, что он работает с несколькими записями. Кроме того, ключи из более поздних dict в списке будут перезаписывать тот же ключ из более раннего dict.
источник
dic1 = {'Мария': 12, 'Пако': 22, 'Хосе': 23} dic2 = {'Патрисия': 25, 'Маркос': 22 'Томас': 36}
dic2 = dict (dic1.items () + dic2.items ())
и это будет результат:
dic2 {'Хосе': 23, 'Маркос': 22, 'Патрисия': 25, 'Томас': 36, 'Пако': 22, 'Мария': 12}
источник