2013-04-20 3 views
0

Я создал список словарей, где каждый словарь имеет значение в виде списка, как представлено ниже:Объединение словари из списка словарей в Python

dictlist=[{a:['e','f','g'],b:['h','i','k'],c:['u','v',w]},{a:['t','u']}] 

Приведенный выше пример содержит два словаря в списке :

one is {a:['e','f','g'],b:['h','i','k'],c:['u','v',w]} 
and another dictionary is {a:['t','u']} 

Все, что я хочу, чтобы объединить элементы этого списка так, чтобы произвести один полный словарь с одинаковыми ключами и значениями в списке следующим образом:

finaldictionary = {a:['e','f','g','t','u'],b:['h','i',k],c:['u','v','w']} 
+2

http://stackoverflow.com/questions/12634452/merging-two-dictionaries-with-nested-arrays – kalgasnik

ответ

1

Решение 'старой школы' было бы что-то вроде этого ...

finaldict = {} 
dictlist = [{'a': ['e','f','g'], 'b': ['h','i','k'], 'c': ['u','v','w']}, 
      {'a': ['t','u']}] 
for d in dictlist: 
    for k in d.keys(): 
     try: 
      finaldict[k] += d[k] 
     except KeyError: 
      finaldict[k] = d[k] 

... что, вероятно, будет работать на всех версиях Python с версии 1.0, но есть много новых способов сделать это.

+0

И все мы должны поддерживать Python 1.0 нашими решениями! : P – jamylak

+0

@jamylak Это в основном потому, что я начал использовать Python 15 лет назад. Кроме того, если OP не указывает, какую версию он использует, для меня это меньше хлопот, чем с последующим комментарием вроде «Это дает мне« ImportError: no module named collections »: P – Aya

+0

реквизит для того, чтобы быть питомником старой школы но я думаю, что мы можем смело предположить, что все используют 2.7+, возможно, 1% OP используют 2.6, но не ниже – jamylak

4

Вы можете использовать collections.defaultdict здесь:

>>> from collections import defaultdict 

>>> dic=defaultdict(list) 

>>> dictlist=[{'a':['e','f','g'],'b':['h','i','k'],'c':['u','v','w']},{'a':['t','u']}] 

>>> for x in dictlist: 
    for k,v in x.items(): 
     dic[k].extend(v) 

>>> dic 
defaultdict(<type 'list'>, {'a': ['e', 'f', 'g', 't', 'u'], 'c': ['u', 'v', 'w'], 'b': ['h', 'i', 'k']}) 

или с помощью dict.setdefault:

>>> dic={} 

>>> for x in dictlist: 
     for k,v in x.items(): 
      dic.setdefault(k,[]).extend(v) 

>>> dic 
{'a': ['e', 'f', 'g', 't', 'u'], 'b': ['h', 'i', 'k'], 'c': ['u', 'v', 'w']} 
+0

Проблема с этим в том, что пропущенный ключ на выходе dict ошибочно возвращает пустой список. – Aya

+0

@Aya Мое второе решение решения будет работать в этом случае. –

+0

Правда, но это редактирование появилось после того, как я опубликовал комментарий. ;-) – Aya

Смежные вопросы