Chciałbym z tego uzyskać:
keys = [1,2,3]
do tego:
{1: None, 2: None, 3: None}
Czy istnieje pythoniczny sposób na zrobienie tego?
To brzydki sposób:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dictionary
python
Juanjo Conti
źródło
źródło
dict.fromkeys([1, 2, 3], [])
wszystkie klucze są mapowane na tę samą listę, a modyfikacja jednego spowoduje ich zmianę.{k:[] for k in [1, 2, 3]}
jest jednak nadal bezpieczne.nikt nie chciał dać rozwiązania ze zrozumieniem dykta?
źródło
False
.).źródło
dict.fromkeys(keys, [])
Wynik:
źródło
keyDict
wprowadza w błąd, ponieważ pierwszy wiersz kodu zwraca aset
, a nie adict
.źródło
TypeError: 'type' object is not iterable
:?list
jest typem. Jeśli nie masz czegoś takiegolist = []
, powyższa metoda zawsze da ci ten sam błądW wielu przepływach pracy, w których chcesz dołączyć domyślną / początkową wartość dla dowolnych kluczy, nie musisz hashować każdego klucza indywidualnie przed czasem. Możesz użyć
collections.defaultdict
. Na przykład:Jest to bardziej wydajne, oszczędza konieczności hashowania wszystkich kluczy w momencie tworzenia. Co więcej,
defaultdict
jest podklasądict
, więc zwykle nie ma potrzeby konwertowania z powrotem na zwykły słownik.W przypadku przepływów pracy, w których potrzebujesz kontroli dozwolonych kluczy, możesz użyć
dict.fromkeys
zgodnie z przyjętą odpowiedzią:źródło