że mam słownika tak:przełączania kluczy i wartości w słowniku w Pythonie
my_dict = {2:3, 5:6, 8:9}
Czy istnieje sposób, że mogę przełączyć klucze i wartości, aby uzyskać:
{3:2, 6:5, 9:8}
że mam słownika tak:przełączania kluczy i wartości w słowniku w Pythonie
my_dict = {2:3, 5:6, 8:9}
Czy istnieje sposób, że mogę przełączyć klucze i wartości, aby uzyskać:
{3:2, 6:5, 9:8}
my_dict2 = dict((y,x) for x,y in my_dict.iteritems())
Jeśli używasz Pythona 2.7 lub 3.x, możesz zamiast tego użyć słownika:
my_dict2 = {y:x for x,y in my_dict.iteritems()}
Edit
Jak zauważył w komentarzach przez JBernardo dla Pythona 3.x trzeba użyć items
zamiast iteritems
'.iteritems()' nie jest poprawna w Pythonie 3.x ... – JBernardo
@JBernardo: Naprawiono dzięki, że zapomniałem o tej – GWW
kolejnej korekcie - w zrozumieniu słownika sugerujesz '{(y, x) dla x, y in dic_cols_w.items()} 'zwraca zestaw, a nie słownik. Nadal będziesz musiał zawinąć to w 'dict (...) ', aby uzyskać słownik – tsando
Spróbuj tego:
my_dict = {2:3, 5:6, 8:9}
new_dict = {}
for k, v in my_dict.items():
new_dict[v] = k
użyć tego kodu (trywialnie zmodyfikowane) z zaakceptowanej odpowiedzi pod numerem Python reverse/invert a mapping:
dict((v,k) for k, v in my_dict.iteritems())
Należy pamiętać, że zakłada to, że wartości w oryginalnym słowniku są unikalne. W przeciwnym razie skończyłoby się zduplikowane klucze w wynikowym słowniku, a to nie jest dozwolone.
I, jak wskazuje @wim, zakłada również, że wartości są nieosiągalne. Jeśli nie masz pewności, co jest i nie jest ulepszalne, zobacz the Python glossary.
może:
flipped_dict = dict(zip(my_dict.values(), my_dict.keys()))
prawdopodobnie nie jest to bezpieczne, ponieważ opiera się na uporządkowaniu klucza i wartości, mimo że zadziałało to dla mnie. Podoba mi się odpowiedź (odpowiedzi) JBernardo/GWW. – aaron
Lepiej jest używać 'iterkeys' i' itervalues' – GWW
To bezpieczne, jeśli dyktat nie zostanie zmieniony podczas operacji. Lubiłem, bo robiłeś to bez zrozumienia. – JBernardo
my_dict = { my_dict[k]:k for k in my_dict}
Czasami, pod warunkiem, że wartości są unikalne nie odbędzie, w tym przypadku, odpowiedzi powyżej zniszczy wszelkie duplikaty wartości.
Poniższy bułki wartości, które mogą być duplikatami się na listę:
from itertools import count
dict([(a,[list(d.keys())[i] for i,j in zip(count(), d.values())if j==a in set(d.values())])
Jestem pewien, że istnieje lepszy sposób (non-lista-comp), ale miałem problem z wcześniejszymi odpowiedziami , więc myślałem, że dostarczę swoje rozwiązanie, na wypadek gdyby inni mieli podobny przypadek.
P.S. Nie oczekuj, że dyktat pozostanie uporządkowany po każdej zmianie oryginału! Ta metoda jest jednorazowym użyciem tylko w statycznym dict - zostałeś ostrzeżony!
Przede wszystkim jest to nie gwarantowane, że jest to możliwe, ponieważ wartości słownika mogą być nieodczepiane.
W przypadku te nie są, możemy użyć funkcjonalne podejście:
reversed_dict = dict(map(reversed, original_dict.items()))
Czy wartości wyjątkowy? Czy wartości są nieosiągalne? – wim