Przez iterację na liście Pythona, chciałbym utworzyć słowniki listy, przy czym wartość każdego słownika również jest listą.Jak wygenerować listę słowników (z wartościami listy) z listy?
Struktura byłoby:
[{key1: [val1, val2]}, {key2: [val3, val4]}, {key3: [val5, val6]}, ...]
zacznę z listy liczb całkowitych:
my_list = [3423, 77813, 12, 153, 1899]
Dla każdego elementu na liście, to powinno stać się kluczowym słownika. Następnie dołączam dwie pozycje do wartości słownika (która jest listą). (Załóżmy, że obie pozycje są zawsze „pies” i „kot”)
Oto co wynik końcowy powinien wyglądać następująco:
[{3423:['dog', 'cat']}, {77813:['dog', 'cat']}, {12:['dog', 'cat']},
{153:['dog', 'cat']}, {1899:['dog', 'cat']}]
Moja próba na to ma wiele problemów:
for i in my_list:
d = {} ## create a dictionary 'd'
d[i] = [].append('dog') ## or `d[i] = ['dog'].append('cat')`
my_list.append(d) ## here is a bug
my_list.remove(i) ## remove the item from the list
nie podoba mi się, że muszę wymienić pusty słownik, i mieć je każdy nazwie to samo (tutaj
d
). Później chciałbym uzyskać dostęp do każdego z tych słowników za pomocą kluczy - nie dbam o ich nazwy.Nie wiem, jak rozsądnie dołączyć wiele elementów do wartości słownika, gdy faktycznie ma to być lista. Co jeśli chciałbym dodać kilka przedmiotów?
Błąd polega na dołączaniu słownika do oryginalnej listy, a następnie usuwaniu elementu. Oczywiście, może to być rozwiązane z nowej listy:
new_list = [] for i in my_list: d = {} d[i] = [].append('dog') new_list.append(d) my_list.remove(i)
ale czuje się bardzo niezdarny.
Czy musisz użyć tej struktury, aby osiągnąć swój cel? Podejście obiektowe może zmniejszyć część złożoności, w zależności od tego, co próbujesz osiągnąć. Przynajmniej możesz rzucić okiem na '' defaultdict'' w module '' collections''. Następnie możesz zrobić '' list_dict = defaultdict (list) '', abyś wiedział, że każdy wpis w dyktacie jest już pustą listą. –