Apakah ada cara bawaan / cepat untuk menggunakan daftar kunci ke kamus untuk mendapatkan daftar item yang sesuai?
Misalnya saya punya:
>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']
Bagaimana saya bisa menggunakan mykeys
untuk mendapatkan nilai yang sesuai di kamus sebagai daftar?
>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]
python
list
dictionary
key
FazJaxton
sumber
sumber
mydict
panggilan fungsi (yang mengembalikan dict) maka ini memanggil fungsi beberapa kali, kan?Beberapa cara lain selain daftar-comp:
map(mydict.__getitem__, mykeys)
None
jika kunci tidak ditemukan:map(mydict.get, mykeys)
Atau, menggunakan
operator.itemgetter
dapat mengembalikan tuple:Catatan : di Python3,
map
mengembalikan iterator daripada daftar. Gunakanlist(map(...))
untuk daftar.sumber
Perbandingan kecepatan kecil:
Jadi pemahaman daftar dan itemgetter adalah cara tercepat untuk melakukan ini.
PEMBARUAN: Untuk daftar dan peta acak besar, saya mendapat hasil yang sedikit berbeda:
Jadi dalam hal ini pemenang adalah
f = operator.itemgetter(*l); f(m)
, dan luar jelas:map(lambda _: m[_], l)
.UPDATE untuk Python 3.6.4:
Jadi, hasil untuk Python 3.6.4 hampir sama.
sumber
Berikut ini tiga cara.
Meningkatkan
KeyError
ketika kunci tidak ditemukan:Nilai default untuk kunci yang hilang.
Melewati kunci yang hilang.
sumber
found_keys = mapping.keys() & iterable
berikanTypeError: unsupported operand type(s) for &: 'list' and 'list'
pada python 2.7; `found_keys = [kunci untuk kunci di mapping.keys () jika kunci dalam iterable] berfungsi paling baikCoba ini:
sumber
Coba ini:
sumber
items()
lebih disukai, tidak harus melakukan pencarian tambahan, tidak adalen(mydict)*len(mykeys)
operasi di sini! (perhatikan bahwa saya menggunakan set)mykeys
diamortisasi waktu konstan, saya menggunakan satu set, bukan daftarsumber
Panda melakukan ini dengan sangat elegan, meskipun pemahaman daftar ofc akan selalu lebih Pythonic secara teknis. Saya tidak punya waktu untuk membandingkan kecepatan sekarang (saya akan kembali lagi nanti):
sumber
Atau hanya
mydict.keys()
itu panggilan metode builtin untuk kamus. Juga jelajahimydict.values()
danmydict.items()
.// Ah, pos OP membuatku bingung.
sumber
Berikut penutupan Python: cara efisien untuk membuat daftar dari nilai dict dengan urutan yang diberikan
Mengambil kunci tanpa membuat daftar:
Hasil:
Yang cocok dengan urutan yang diberikan oleh daftar
sumber
memetikan ada kunci tidak dalam dikt.
sumber