/ / Tworzenie słownika o takich samych wartościach [duplikat] - python, słownik

Tworzenie słownika o tych samych wartościach [duplicate] - python, dictionary

Załóżmy, że mam słownik a = {} i chcę mieć taki wynik

value = 12
a = {"a":value,"b":value,"f":value,"h":value,"p":value}

i tak dalej dla wielu keys:same value. Teraz oczywiście mogę to zrobić w ten sposób

a.update({"a":value})
a.update({"b":value})

i tak dalej.... ale ponieważ wartość jest taka sama dla wszystkich kluczy, czy nie mamy do tego bardziej pythonowego podejścia?

Odpowiedzi:

18 dla odpowiedzi № 1

Możesz użyć ze zrozumieniem (python 2.7+):

>>> v = 12
>>> d = {k:v for k in "abfhp"}
>>> print d
{"a": 12, "h": 12, "b": 12, "p": 12, "f": 12}

7 dla odpowiedzi nr 2

Co powiesz na utworzenie nowego słownika z kluczami, które chcesz i wartością domyślną ?. Sprawdź fromkeys metoda.

>>> value=12
>>> a=dict.fromkeys(["a", "b", "f", "h", "p"], value)
>>> print a
{"a": 12, "h": 12, "b": 12, "p": 12, "f": 12}

2 dla odpowiedzi nr 3
>>> a=dict(zip("abfhp",[12]*len("abfhp")))
>>> a
{"a": 12, "h": 12, "b": 12, "p": 12, "f": 12}

1 dla odpowiedzi nr 4
a = dict()
for key in keys:
a[key] = value

0 dla odpowiedzi № 5

Jak zauważył stummjr, rozumienie słownika jest przydatne do zrozumienia i użycia, zwłaszcza że wszystko w Pythonie jest dicitonary.

Innym sposobem rozważenia rozwiązania tego problemu jest funkcja lambda.

makeDict = lambda keys, values: { k:v for k, v in zip(keys, values) }
makeDict( [1,2,3], list("abc") )
["a": 1, "c": 3, "b": 2]

Oto, co makeDict wygląda na przepisaną jako zwykłą funkcję, jeśli to dodaje jakiejkolwiek przejrzystości.

def makeDict(keys, values):
return { k:v for k, v in zip(keys, values) }

W każdym razie lambdas mogą być zabawąwokół, również nie jest to najmocniejszy przykład. Istnieje możliwość utraty danych przy użyciu zip. Obie sekwencje muszą mieć tę samą długość, aby poprawnie działać. sekwencje W poniższym przykładzie dodatkowy element w wartościach nie powinien pojawić się w słowniku.

{ k:v for k, v in zip( list("abc"), [1,2,3,4]) }
["a": 1, "c": 3, "b": 2]