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()) 

Vorschläge, wie ein bedingten Ausdruck im Wörterbuch Verständnis schließen Schlüssel zu entscheiden, ob, Werttupel sollteBedingte Ausdrücke in Python Wörterbuch Comprehensions

+0

Ist die Bedingung immer in der Form 'key ==" ... "' oder suchen Sie eine allgemeinere Lösung? – icktoofay

+0

'if Schlüssel ==" Hallo "' ist kein [Bedingungsausdruck] (http://docs.python.org/2/reference/expressions.html#conditional-expressions) und 'dict (...)' nicht ein Diktatverständnis. –

+1

'//' ist kein gültiger Python-Kommentar –

Antwort

16

die if am Ende Verschieben in dem neuen Wörterbuch aufgenommen werden:

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

Sie auch dict-Verständnis (dict(...) ist nicht ein verwenden können, verwenden Sie einfach die dict Fabrik über einen Generator Ausdruck):

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

Arbeitete !! Vielen Dank. Aber warum unterscheidet sich die Syntax bei dict comprehensions im Vergleich zu Listencomprehensions – user462455

+2

@ user462455: 'dict ((key, value) für ... in ... if ...)' ist kein Wörterbuchverständnis; Es ist ein Generatorverständnis, das an "dict" weitergegeben wird, was den gleichen Effekt hat. Neuere Versionen von Python haben echte Wörterbücher mit der Syntax '{key: value for ... in ... if ...}'. – icktoofay

8

Sie brauchen nicht Wörterbuch Verständnis zu verwenden:

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

und dict(...) ist nicht Wörterbuch Verständnis.

+1

+1 Ich denke, das ist die beste Lösung für OP Frage –

+0

wird dies nicht brechen, wenn es keinen HELLO-Schlüssel im Quellwörterbuch gibt? bedingte hinzufügen? Nein? –

+0

@SyedMauzeRehan, Es wird brechen, wenn es keine hallo-Taste gibt. Sie können dies verwenden: 'b = {" Hallo ": a.get ('Hallo')}' (das wird '{'Hallo': None}' zurückgeben, wenn es keinen 'Hallo' Schlüssel gibt). Oder benutze 'b = {" hallo ": a [" hallo "]} wenn 'hallo' in einem else {}', wenn du '{}' bekommen willst, wenn 'hallo' fehlt. – falsetru

Verwandte Themen