to lista, a nie dykt: >>> type ([{'a': 1}, {'b': 2}]) <type 'list'>
killown
Naprawdę powinien istnieć jeden wkład do tego, biorąc pod uwagę, jak często się pojawia. Czy jest powód, dla którego {** d for d in d_list} nie jest obsługiwany?
markemus
Odpowiedzi:
163
Działa to w przypadku słowników o dowolnej długości:
>>> result ={}>>>for d in L:... result.update(d)...>>> result
{'a':1,'c':1,'b':2,'d':2}
>>> 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}>>>
Uwaga Dodałem drugą parę klucz / wartość do ostatniego słownika, aby pokazać, że działa z wieloma wpisami. Również klucze z dykt w dalszej części listy nadpiszą ten sam klucz z wcześniejszego dyktu.
Odpowiedzi:
Działa to w przypadku słowników o dowolnej długości:
Jako zrozumienie :
źródło
W przypadku Pythona 3.3+ istnieje
ChainMap
zbiór :Zobacz także:
źródło
Uwaga: kolejność „b” i „c” nie odpowiada twojemu wynikowi, ponieważ dykty są nieuporządkowane
jeśli dykty mogą mieć więcej niż jeden klucz / wartość
źródło
W przypadku słowników płaskich możesz to zrobić:
źródło
Jest to podobne do @delnan, ale oferuje opcję modyfikacji elementów k / v (klucz / wartość) i uważam, że jest bardziej czytelne:
na przykład zamień elementy k / v w następujący sposób:
wypakowuje krotkę k, v z generatora słownika .items () po wyciągnięciu obiektu dict z listy
źródło
Jest to asymetryczne, ponieważ musisz wybrać, co zrobić z duplikatami kluczy; w tym przypadku
dict2
nadpiszedict1
. Wymień je na inny sposób.EDYCJA: Ach, przepraszam, nie widziałem tego.
Można to zrobić w jednym wyrażeniu:
Nie mam uznania za to ostatnie!
Jednak argumentowałbym, że może to być bardziej Pythonic (jawne> niejawne, płaskie> zagnieżdżone), aby zrobić to za pomocą prostej
for
pętli. YMMV.źródło
Możesz użyć funkcji łączenia z biblioteki funcy :
źródło
Mała poprawa dla odpowiedzi @dietbuddha z rozpakowywaniem słownika z PEP 448 , dla mnie jest bardziej czytelna w ten sposób, a także jest szybsza :
Pamiętaj jednak, że działa to tylko z wersjami Pythona 3.5+.
źródło
Uwaga Dodałem drugą parę klucz / wartość do ostatniego słownika, aby pokazać, że działa z wieloma wpisami. Również klucze z dykt w dalszej części listy nadpiszą ten sam klucz z wcześniejszego dyktu.
źródło
dic1 = {'Maria': 12, 'Paco': 22, 'Jose': 23} dic2 = {'Patricia': 25, 'Marcos': 22 'Tomas': 36}
dic2 = dict (dic1.items () + dic2.items ())
i taki będzie wynik:
dic2 {'Jose': 23, 'Marcos': 22, 'Patricia': 25, 'Tomas': 36, 'Paco': 22, 'Maria': 12}
źródło