Vergleich von Zwei Wörterbüchern die Wichtigsten Werte und die Rückgabe der Wert, Wenn Match
Ich bin ein Anfänger auf Python, aber ich habe versucht, diese syntax, und ich kann nicht es herausfinden-das war schon wirklich verblüffend.
crucial = {'eggs': '','ham': '','cheese': ''}
dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
if crucial.keys() in dishes.keys():
print dishes[value]
Was ich will zu tun, ist-wenn entscheidend ist, hat einen Schlüssel (in diesem Fall eggs
) in den Gerichten, wird es wieder 2
. Es scheint einfach genug, aber ich glaube, ich muss pfuschen irgendeine Art von syntax irgendwo. Wenn jemand könnte mich ein wenig, dass würde sehr geschätzt werden.
Den real-Wörterbüchern bin ich im Vergleich mit rund 150 Schlüsseln lang, aber ich hoffe, dass dieser code ist einfach genug.
- Welche version von Python benutzt du?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zur Iteration über die Schlüssel, in den entscheidenden und vergleichen Sie jeweils gegen die Gerichte Tasten. Also direkt eine modifizierte version des Codes.
Könnte es besser sein, als angegeben (keine Angabe erforderlich .Schlüssel):
Wenn Sie mit Python 3, die
keys
- Methode von dictionaries folgt dieset
- Schnittstelle. Das bedeutet, dass Sie tun können, ein Schnittpunkt der Tasten der beiden Wörterbücher über die&
Betreiber.Benötigen oder wenn Sie eine Liste der Werte:
In Python 2 konnten Sie verwalten die gleiche Sache durch das explizite anlegen von sets (vielleicht auch aus der
iterkeys
generator), aber wahrscheinlich wäre es besser, machen Sie einfach eine Schleife über die Tasten, wie einige der anderen Antwort vorschlagen.Hier ist eine variation auf die Schleife, die ich glaube nicht, ich habe gesehen, dass jemand anderes zu tun. Die äußere Schleife wird sowohl Schlüssel als auch Werte aus der
dishes
dict, so dass Sie nicht brauchen, um separat suchen Sie nach dem Wert von key.mit list comprehension ist gut
oder ,wie pro gnibbler:
dieser Ausdruck iteriert entscheidend, alle wichtigen, in den entscheidenden, wenn Schlüssel in Gerichten, es wird wieder den Wert der gleiche Schlüssel in Gerichten , schließlich gibt eine Liste aller Werte abgleichen.
oder Sie nutzen diesen Weg, (set (entscheidende) & set(Geschirr)) return gemeinsame Schlüssel von beiden gesetzt, dann wird die Iteration dieses set und die Rückgabe der Werte an Speisen .
has_key
ist veraltet. Bitte verwenden Siex in dishes
statt[dishes[x] for x in set(crucial).intersection(dishes)]
abrasieren eine satte 70ns 🙂Wenn Sie nicht vertraut sind mit Python-REPL (Read-Evaluate-Print-Loop -- das Ding, wo du den Typ im code, drücken Sie die EINGABETASTE, und sofort ausgewertet wird), das wäre ein gutes Werkzeug hier.
So können Sie uns brechen Sie Ihre code.
Einfach genug. Obwohl ich merke, Sie haben keine Werte in die
crucials
Wörterbuch. Ich bin nicht sicher, ob das eine Abkürzung ist für Sie Beispiel-oder wenn Sie einfach nur sorgen über die Tasten. Wenn Sie nur sorgen über die Tasten, dann nehme ich an, Sie verwenden ein Wörterbuch für die Wahrung der Eindeutigkeit. In diesem Fall sollten Sie sich dieset
- Daten-Struktur.Beispiel:
Weiter haben wir
hier sind Sie mit der
in
Vergleichsoperator. Beispiel:Wenn wir bewerten
crucial.keys()
unddishes.keys()
bekommen wiralso während der Ausführung Ihres Codes bewertet als
gibt
False
da der Wert['eggs', 'bacon', 'sausage']
(eine Liste) ist nicht in der Liste['eggs', 'bacon', 'sausage', 'spam']
(in der Tat gibt es keine Listen innerhalb dieser Liste, die nur strings).Damit Sie die Bewertung als
Es sieht eher aus wie Sie haben vermischt/verwechselt die
in
Betreiber, die einen booleschen Wert zurückgibt und die für die iterator (for item in collection
). Es ist eine syntax für diese Art der Sache. Es heißt Liste Verstehens die Sie hier finden können Proben von in @ShawnZhang und @kmad Antworten. Sie können denken, es als ein knappe Art und Weise zu filtern und zu ändern (anzeigen), eine Sammlung, der Rückkehr eine Liste als Ergebnis. Ich will nicht zu sehr in die Tiefe es oder ich werde am Ende in eine Einführung in die funktionale Programmierung.Ihre andere option ist die Verwendung der
for .. in
iteration undin
Operatoren getrennt. Das ist die Lösung @timc gab. Solche Lösungen sind sicherlich noch mehr vertraut oder einfacher für Anfänger. Es trennt klar das Verhalten von Iteration und filtern. Es ist auch eher so was wäre in anderen Programmiersprachen geschrieben, dass es keine entsprechende Liste Verstehens. Diejenigen, die Arbeit in Python eine Menge würde wahrscheinlich zugunsten der Verständlichkeit-syntax.has_key()
entfernt wurde in Python 3: http://docs.python.org/3.1/whatsnew/3.0.html#builtinsStatt, die Sie verwenden können:
Verwendet die Methode die hier genannt wird, Liste Verständnis. Sie können darüber Lesen Sie hier:
http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
Ebenso können Sie haben
set(dishes.keys()) - set(crucial.keys())
,set(dishes.keys()) | set(crucial.keys())
oderset(dishes.keys()) ^ set(crucial.keys())
.