>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> 'one' in d.values()
True
Karena penasaran, beberapa waktu perbandingan:
>>> 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: Dan jika Anda bertanya-tanya mengapa ... alasannya adalah bahwa masing-masing di atas mengembalikan jenis objek yang berbeda, yang mungkin atau mungkin tidak cocok untuk operasi pencarian:
>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>
EDIT2: Sesuai permintaan dalam komentar ...
>>> 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]
d
, penentuan waktu secara efektif tidak berarti. Dalam Python 3,dict.values()
adalah tampilan kamus, secara default, dandict.itervalues()
dandict.viewvalues()
hilang. Anda bisa menguji ulang ini (dengan kamus yang lebih besar) dan menggunakannyalist(d.values())
untuk mendapatkan perilaku Python 2, daniter(d.values())
untuk mendapatkandict.itervalues()
perilaku tersebut, tetapi karena kedua versi tersebut memerlukan pencarian dan panggilan global, keduanya akan lebih lambat. Keduanya melakukan pekerjaan ekstra yang tidak diperlukan.