Mam dwie listy tej samej długości:Jak połączyć dwie listy w słowniku w Pythonie?
[1,2,3,4]
i [a,b,c,d]
Chcę utworzyć słownik, gdzie mam {1:a, 2:b, 3:c, 4:d}
Jaki jest najlepszy sposób to zrobić?
Mam dwie listy tej samej długości:Jak połączyć dwie listy w słowniku w Pythonie?
[1,2,3,4]
i [a,b,c,d]
Chcę utworzyć słownik, gdzie mam {1:a, 2:b, 3:c, 4:d}
Jaki jest najlepszy sposób to zrobić?
dict(zip([1,2,3,4], [a,b,c,d]))
Jeśli lista jest duża, należy użyć itertools.izip
.
Jeśli masz więcej kluczy niż wartości i chcesz wprowadzić wartości dla dodatkowych kluczy, możesz użyć itertools.izip_longest
.
Tutaj a
, b
, c
, a d
są zmienne - to będzie działać dobrze (tak długo, jak są one określone), ale prawdopodobnie oznaczało ['a','b','c','d']
jeśli chcesz je jako ciągi.
zip
zajmuje pierwszą pozycję z każdej iterable i sprawia, krotki, to drugi element z siebie, itp itd
dict
może zabierać iterowalny z iterables, gdzie każdy wewnętrzny iterable ma dwie pozycje - to następnie używa pierwszego jako klucza, a drugiego jako wartości dla każdego elementu.
+1 za wskazanie prawdopodobnego błędu OP za pomocą nazw/ciągów zmiennych. – Gerrat
dzięki za wskazanie mi "izip_longest", potrzebowałem dokładnie tego. –
>>> dict(zip([1, 2, 3, 4], ['a', 'b', 'c', 'd']))
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Jeśli nie są tej samej wielkości, zip
obetnie im dłużej.
http://docs.python.org/library/stdtypes.html#dict reference – fbstj
dict(zip([1,2,3,4], ['a', 'b', 'c', 'd']))
nie wiem o najlepszy (najprostszy najszybszy najbardziej czytelny??), Ale jednym ze sposobów byłoby:
dict(zip([1, 2, 3, 4], [a, b, c, d]))
znalazłem się konieczności tworzenia słownika z trzech list (szerokość i długość geograficzna oraz wartość), z następującym sposobem:
> lat = [45.3,56.2,23.4,60.4]
> lon = [134.6,128.7,111.9,75.8]
> val = [3,6,2,5]
> dict(zip(zip(lat,lon),val))
{(56.2, 128.7): 6, (60.4, 75.8): 5, (23.4, 111.9): 2, (45.3, 134.6): 3}
lub s odobne do powyższych przykładów:
> list1 = [1,2,3,4]
> list2 = [1,2,3,4]
> list3 = ['a','b','c','d']
> dict(zip(zip(list1,list2),list3))
{(3, 3): 'c', (4, 4): 'd', (1, 1): 'a', (2, 2): 'b'}
Uwaga: Słowniki są „orderless”, ale jeśli chcesz zobaczyć go jako „sortowane”, patrz THIS pytanie, czy chcesz, aby posortować według klucza, lub THIS pytanie, jeśli chcesz sortować według wartości.
Jeśli na pierwszej liście znajdują się zduplikowane klucze, które odwzorowują różne wartości na drugiej liście, na przykład relację jeden-do-wielu, ale trzeba połączyć wartości lub dodać je lub coś zamiast aktualizować, można to zrobić:
i = iter(["a", "a", "b", "c", "b"])
j = iter([1,2,3,4,5])
k = list(zip(i, j))
for (x,y) in k:
if x in d:
d[x] = d[x] + y #or whatever your function needs to be to combine them
else:
d[x] = y
W tym przykładzie d == {'a': 3, 'c': 4, 'b': 8}
Wadą stackoverflow jest, że nie jest nawet mniejsza zachęta do RTFM: http://docs.python.org/library/stdtypes.html#dict – hop