2010-10-06 22 views

Odpowiedz

153

dict((el,0) for el in a) będzie działać dobrze.

Python 2.7 i wyżej także obsługują interpretację Dict. Ta składnia to {el:0 for el in a}.

+1

wyrażenia Generator uniknąć napowietrznej pamięci wypełniania całą listę. –

+14

Powinieneś prawdopodobnie promować ten komentarz w swojej aktualnej odpowiedzi. Również z Pythona 2.7 i Pythona 3 możesz zrobić '{el: 0 dla el w a}. (Dodaj to również do swojej odpowiedzi.) – Zooba

2
d = dict([(x,0) for x in a]) 

** edit Rozwiązanie Tima jest lepsze, ponieważ wykorzystuje generatory, aby zobaczyć komentarz do jego odpowiedzi.

6

Oprócz odpowiedź Tima, który jest bardzo odpowiedni do konkretnego przykładu, warto wspomnieć collections.defaultdict, który pozwala robić rzeczy tak:

>>> d = defaultdict(int) 
>>> d[0] += 1 
>>> d 
{0: 1} 
>>> d[4] += 1 
>>> d 
{0: 1, 4: 1} 

do mapowania [1, 2, 3, 4] jak w przykładzie, że to ryba bez wody. Ale w zależności od powodu, dla którego zadałeś pytanie, może to być bardziej odpowiednia technika.

86
d = dict.fromkeys(a, 0) 

a lista, 0 jest wartość domyślna. Należy zwrócić uwagę, aby nie ustawiać wartości domyślnej dla jakiegoś zmiennego obiektu (tj. Listy lub dyktowania), ponieważ będzie to jeden obiekt używany jako wartość dla każdego klucza w słowniku (sprawdź, czy dla tego przypadku jest dostępne rozwiązanie here). Numery/ciągi są bezpieczne.

+11

Jedyny sposób pytony. – SilentGhost

+1

To wydaje się być czystsze (przynajmniej dla mnie), jak to porównać z Timem? – blahster

+1

Rozwiązanie Tima działa dla dowolnych wartości domyślnych (możesz zainicjować słownik z pustą listą lub obiektem datetime lub czymkolwiek). W moim rozwiązaniu można go zainicjować tylko za pomocą niezmiennych obiektów (int/float, string, ...). Jest bardziej pytonowo dla twojego przypadku (domyślna wartość to 0) i prawdopodobnie jest również szybsza. – eumiro

7

w Pythonie wersji> = 2,7 i w python 3:

d = {el:0 for el in a} 
Powiązane problemy