2013-08-15 15 views
7
a = {"hello" : "world", "cat":"bat"} 

//Trying to achieve this 
//Form a new dictionary only with keys with "hello" and their values 
b = {"hello" : "world"} 

//This didn't work 

b = dict((key, value) if key == "hello" for (key, value) in a.items()) 

Wszelkie sugestie, w jaki sposób to wyrażenie warunkowe w słowniku zrozumienia zdecydować, czy klucz, wartość krotka powinny zostać włączone do nowego słownikawyrażenia warunkowego listowe Python Słownik

+0

Czy warunek zawsze będzie miał postać "klucz ==" ... "" lub czy szukasz bardziej ogólnego rozwiązania? – icktoofay

+0

'jeśli klucz ==" hello "' nie jest [wyrażenie warunkowe] (http://docs.python.org/2/reference/expressions.html#conditional-expressions) i 'dict (...)' nie rozumienie dyktowania. –

+1

'//' nie jest poprawnym komentarzem python –

Odpowiedz

16

Przesuń if na koniec:

b = dict((key, value) for (key, value) in a.items() if key == "hello") 

można nawet użyć dict-zrozumieniem (dict(...) nie jest jeden, jesteś po prostu używając fabrykę dict nad ekspresją generatora):

b = { key: value for key, value in a.items() if key == "hello" } 
+0

Pracowałem !! Dzięki. Ale dlaczego składnia różni się dla interpretacji dict w porównaniu do rozumienia listów – user462455

+2

@ user462455: 'dict ((klucz, wartość) dla ... w ... jeśli ...)' nie jest zrozumieniem słownika; to zrozumienie generatora przekazane do 'dict', które ma ten sam efekt. Nowsze wersje Pythona zawierają prawdziwe słowniczki ze składnią '{klucz: wartość dla ... w ... jeśli ...}'. – icktoofay

8

Nie trzeba używać słownika zrozumieniem:

>>> a = {"hello" : "world", "cat":"bat"} 
>>> b = {"hello": a["hello"]} 
>>> b 
{'hello': 'world'} 

i dict(...) nie jest słownik zrozumieniem.

+1

+1 Myślę, że ten jest najlepszym rozwiązaniem dla pytania OP –

+0

czy to nie pęknie, jeśli w słowniku źródłowym nie ma klucza HELLO? warunkowe dodać? Nie? –

+0

@SyedMauzeRehan, zepsuje się, jeśli nie ma klucza 'hello'. Możesz użyć tego: 'b = {" hello ": a.get (" cześć ")}' (które zwróci '{'hello': Brak}' jeśli nie ma klucza 'hello'). Lub użyj 'b = {" hello ": a [" hello "]} jeśli" cześć "w else {}' jeśli chcesz uzyskać '{}' w przypadku braku 'hello'. – falsetru

Powiązane problemy