Hoe te controleren of een waarde bestaat in een woordenboek (Python)

Ik heb het volgende woordenboek in Python:

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

Ik heb een manier nodig om te vinden of een waarde zoals “One” of “twee” in dit woordenboek bestaat.

Als ik bijvoorbeeld wilde weten of de index “1” bestond, zou ik eenvoudig moeten typen:

"1" in d

En dan zou Python me vertellen of dat waar of onwaar is, maar ik moet hetzelfde exacte ding doen behalve om te vinden of een waarde bestaat.


Antwoord 1, Autoriteit 100%

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

Uit nieuwsgierigheid, een vergelijkende 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]

bewerken: en voor het geval u zich afvraagt ​​waarom … De reden is dat elk van het bovenstaande een ander type object retourneert, dat al dan niet geschikt is voor opzoekoperaties:

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

EDIT2:volgens verzoek in opmerkingen…

>>> 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]

Antwoord 2, autoriteit 8%

In Python 3 kun je

"one" in d.values()

om te testen of "one"tot de waarden van uw woordenboek behoort.

In Python 2 is het efficiënter om te gebruiken

"one" in d.itervalues()

in plaats daarvan.

Merk op dat dit een lineaire scan veroorzaakt door de waarden van het woordenboek, kortsluiting zodra het wordt gevonden, dus dit is een stuk minder efficiënt dan controleren of een sleutel aanwezig is.


Antwoord 3, autoriteit 5%

Python-woordenboek heeft get(key)-functie

>>> d.get(key)

Bijvoorbeeld,

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

Als uw sleutel niet bestaat, wordt de waarde Nonegeretourneerd.

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

Inhoud relevant voor versies lager dan 3.0 en hoger dan 5.0.

.


Antwoord 4, autoriteit 2%

Woordenboekweergaven gebruiken:

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

Antwoord 5

Verschillende typen om de waarden te controleren

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

Wat als lijst met waarden

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

Wat als lijst met waarden met tekenreekswaarden

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

Antwoord 6

U kunt dit gebruiken:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
print("one" in d.values)

Of u kunt elke functie gebruiken:

print(any([True for i,j in d1.items() if j == "one"]))

Antwoord 7

In Python 3 kun je de functie values()van het woordenboek gebruiken. Het retourneert een view-object van de waarden. Dit kan op zijn beurt worden doorgegeven aan de functie iterdie een iterator-object retourneert. De iterator kan worden gecontroleerd met behulp van in, zoals dit,

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

Of u kunt het view-object direct gebruiken omdat het lijkt op een lijst

'one' in d.values()

Other episodes