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 None
geretourneerd.
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 iter
die 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()