Dlaczego nie ta praca ?:Python: Dlaczego nie mogę rozpakować krotki w słowniku?
d["a"], d["b"] = *("foo","bar")
Czy istnieje lepszy sposób, aby osiągnąć to, co staram się osiągnąć?
Dlaczego nie ta praca ?:Python: Dlaczego nie mogę rozpakować krotki w słowniku?
d["a"], d["b"] = *("foo","bar")
Czy istnieje lepszy sposób, aby osiągnąć to, co staram się osiągnąć?
To działa, jeśli definiowania słownika d
przed ręką i wyjąć *
stamtąd:
>>> d = {}
>>> d["a"], d["b"] = ("foo","bar")
W rzeczywistości, nie trzeba tych nawiasów na RHS, więc będzie również pracować:
>>> d['a'], d['b'] = 'foo', 'bar'
Ahh, nie potrzebujesz *. Dzięki. – jsj
@ trideceth12: Z ciekawości, skąd wziął się pomysł na '*'? –
@ trideceth12. Nie ma za co :) –
To tylko literówka (*
). To działa (testowane w Pythonie 2.7.3):
d = dict()
d["a"], d["b"] = ("foo", "bar")
Inni pokazali, jak można rozpakować do dyktatury. Jednak w odpowiedzi na twoje pytanie "czy istnieje lepszy sposób", argumentowałbym, że:
d.update(a='foo',b='bar')
o wiele łatwiej parsować. Admitedtly, to nie zadziała, jeśli masz a
i b
które są zmienne, ale wtedy można użyć:
d.update({a:'foo',b:'bar'})
i myślę, że nadal preferują tę wersję z następujących powodów:
A jeśli zaczynasz z 2-krotki wartości, niż to jest statyczna jak można pokazać, można nawet użyć zip
:
d.update(zip(("a","b"),("foo","bar")))
która wprawdzie nie tak ładna jak inne dwie opcje ...
... Omówiliśmy wszystkie 3 sposoby użycia dict.update
:).
To jest naprawdę miłe. Zapomniałem o tym. Przynajmniej nie stanie się to brzydkie, gdy zwiększy się liczba wartości. +1 –
Nigdy bym nawet nie pomyślał, aby spróbować czegoś takiego ... – mgilson