2016-11-11 5 views
0
foob = {1:{'url':'www.abc.com', 'name':'abc'}, 2:{'url':'www.def.com', 'name':'def'}} 
item = {'url':'www.abc.com', 'name':'wrong name'} 

if item in foob.values(): 
    print 'yes' 
else: 
    print 'no' 

Ich mag item in list.values() ändern, so dass es im Vergleich nur url Werte und nicht die ganze Wörterbuch. Ist es möglich, das zu tun, ohne durch ganzes Wörterbuch dort eine einfache Möglichkeit, dies zu tun, ohne eine separate For-Schleife zu schreiben?Prüfwert im Wörterbuch des Wörterbücher

+1

Iteration ist die einzige Wahl, versuchen Sie es in eine andere Struktur wie Listen Umwandlung usw. dann erreichen Sie Ihr gewünschtes Ergebnis ist aber trotzdem ein komplexer Prozess. –

+1

Sogar "in" iteriert die Liste hinter den Kulissen ...! – deceze

+1

Ja es ist, in irgendeiner Weise brauchen Sie Iterationen. –

Antwort

2

Verwendung any und einen Generator Ausdruck:

if any(i['url'] == item['url'] for i in dict.values()): 
    print 'yes' 
else: 
    print 'no' 
+0

Ich kann keine irgendwie verwenden, es funktioniert in Eclipse, aber ich kodiere ein Plugin für Plex und dort bekomme ich 'NameError: globaler Name 'any' ist nicht definiert 'und weiß nicht, warum ... – Valdas

+0

Quick Googling behoben dies :) http://StackOverflow.com/Questions/9037821/PythonNameerror-global-name-any-is-not-defined – Valdas

0

Ich denke, dieser Code wird funktionieren, aber ich glaube nicht, dass es eine Möglichkeit gibt, eine Art Iterate zu vermeiden.

dict = {1:{'url':'www.abc.com', 'name':'abc'}, 2:{'url':'www.def.com', 'name':'def'}} 
item = {'url':'www.abc.com', 'name':'wrong name'} 

if item['url'] in [i['url'] for i in dict.values()]: 
    print 'yes' 
else: 
    print 'no' 

I deceze Code zustimmen, verwenden Sie

+0

Das ist eine ziemlich verschwenderische Art, es zu tun. – deceze

+0

@deceze bitte ausarbeiten – Valdas

+0

@deceze Sie meinen, neben der Tatsache, es definiert die eingebaute Funktion "dict" neu? –

Verwandte Themen