it-swarm.com.de

So überprüfen Sie, ob ein Wert in einem Wörterbuch (Python) vorhanden ist

Ich habe das folgende Wörterbuch in Python:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}

Ich muss herausfinden, ob in diesem Wörterbuch ein Wert wie "eins" oder "zwei" vorhanden ist.

Wenn ich zum Beispiel wissen wollte, ob der Index "1" existiert, müsste ich einfach Folgendes eingeben:

"1" in d

Und dann würde python mir sagen, ob das wahr oder falsch ist, jedoch muss ich genau das Gleiche tun, außer um herauszufinden, ob ein Wert existiert.

212
JimmyK
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> 'one' in d.values()
True

Aus Neugier, einige vergleichende Timing:

>>> T(lambda : 'one' in d.itervalues()).repeat()
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965]
>>> T(lambda : 'one' in d.values()).repeat()
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875]
>>> T(lambda : 'one' in d.viewvalues()).repeat()
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287]

EDIT: Und für den Fall, dass Sie sich fragen, warum ... der Grund dafür ist, dass jedes der oben genannten Objekte einen anderen Objekttyp zurückgibt, der für Suchvorgänge gut geeignet sein kann oder nicht:

>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>

EDIT2: Gemäß Anfrage in Kommentaren ...

>>> T(lambda : 'four' in d.itervalues()).repeat()
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955]
>>> T(lambda : 'four' in d.values()).repeat()
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707]
>>> T(lambda : 'four' in d.viewvalues()).repeat()
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906]
327
mac

Sie können verwenden

"one" in d.itervalues()

um zu testen, ob "one" zu den Werten Ihres Wörterbuchs gehört.

27
Sven Marnach

Python-Wörterbuch hat get (key) Funktion

>>> d.get(key)

Zum Beispiel,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> d.get('3')
'three'
>>> d.get('10')
none

Wenn Ihr Schlüssel nicht existiert, wird der Wert none zurückgegeben.

foo = d[key] # raise error if key doesn't exist
foo = d.get(key) # return none if key doesn't exist

Inhalt relevant für Versionen kleiner als 3.0 und größer als 5.0. .

22
Shameem

Verwenden Sie Wörterbuchansichten:

if x in d.viewvalues():
    dosomething()..
10
soulcheck

Es gibt verschiedene Arten, um die Werte zu überprüfen

d = {"key1":"value1", "key2":"value2"}
"value10" in d.values() 
>> False

Was ist, wenn Liste der Werte

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6']}
"value4" in [x for v in test.values() for x in v]
>>True

Was ist, wenn Liste der Werte mit Zeichenfolgenwerten

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6'], 'key5':'value10'}
values = test.values()
"value10" in [x for v in test.values() for x in v] or 'value10' in values
>>True
1
sim

In Python 3 können Sie die Funktion values() des Wörterbuchs verwenden. Es wird ein Ansichtsobjekt der Werte zurückgegeben. Dies kann wiederum an die Funktion iter übergeben werden, die ein Iteratorobjekt zurückgibt. Der Iterator kann mit in wie folgt überprüft werden:

'one' in iter(d.values())

Sie können das Ansichtsobjekt auch direkt verwenden, da es einer Liste ähnelt

'one' in d.values()
0
Reed Richards