/ / unpack na podstawie nazw zmiennych - python, python-2.7, python-3.x

rozpakuj na podstawie nazw zmiennych - python, python-2.7, python-3.x

Chciałbym rozpakować dyktafony takie jak:

one, two, three, four = unpack(this_dict)

gdzie

this_dict = {"one": 1, "two": 2, "three": 3, "four": 4}

moim jedynym problemem jest unpack musi wiedzieć, do których nazw będzie przypisany. Jak to zrobić w python? Dziękuję Ci

Odpowiedzi:

5 dla odpowiedzi № 1

Dyktafony są nieuporządkowane, więc jeśli chcesz rozpakować w określonej kolejności, musisz użyć klawiszy, możesz wykonać funkcję, aby to zrobić, przekazując klucze, do których chcesz uzyskać dostęp:

from operator import itemgetter
def unpack(d, *args):
return itemgetter(*args)(d)
one, two, three, four = unpack(this_dict, "one" ,"two" ,"three" ,"four")

print(one, two, three, four)

Lub używając mapy:

def unpack(d, *args):
return map(d.get, args)
one, two, three, four = unpack(this_dict, "one" ,"two" ,"three" ,"four")

print(one, two, three, four)

Różnica między nimi jest pierwszadaje KeyError jeśli przekazałeś klucz, który nie istnieje, ten drugi ustawiłby zmienną na None dla brakującego klucza, więc jest to coś, o czym warto pamiętać.


3 dla odpowiedzi № 2

Z pewnością nie powinieneś tego robić, ale jeśli masz zasięg na poziomie modułu, możesz dodać swój słownik globals().

this_dict = {"one": 1, "two": 2, "three": 3, "four": 4}
globals().update(this_dict)

print one, two, three, four
# 1 2 3 4

Zauważ, że takie podejście jest niebezpieczne, jeśli słownik zawiera klucze takie jak list, int, False, i tak dalej. Można to technicznie zrobić w funkcji lub klasie, ale byłoby jeszcze gorzej.