Saya menerima kamus sebagai masukan, dan ingin mengembalikan kamus yang kuncinya adalah nilai masukan dan nilainya akan menjadi tombol masukan yang sesuai. Nilainya unik.
Misalnya, masukan saya adalah:
a = dict()
a['one']=1
a['two']=2
Saya ingin keluaran saya menjadi:
{1: 'one', 2: 'two'}
Untuk memperjelas, saya ingin hasil saya setara dengan berikut ini:
res = dict()
res[1] = 'one'
res[2] = 'two'
Adakah cara Pythonic yang rapi untuk mencapai ini?
python
dictionary
Roee Adler
sumber
sumber
Jawaban:
Python 2:
Python 3 (terima kasih kepada @erik):
sumber
[
dan]
. apakah pemahaman daftar tidak memerlukan[
dan]
?sumber
Dari Python 2.7 dan seterusnya, termasuk 3.0+, ada versi yang bisa dibilang lebih pendek dan lebih mudah dibaca:
sumber
sumber
Anda dapat menggunakan pemahaman dict :
Diedit: Untuk Python 3, gunakan
a.items()
sebagai penggantia.iteritems()
. Diskusi tentang perbedaan di antara mereka dapat ditemukan di iteritems dengan Python di SO.sumber
Kamu bisa mencoba:
Berhati-hatilah karena Anda tidak dapat 'membalikkan' kamus jika
{'one':1,'two':1}
. Kamus baru hanya dapat memiliki satu item dengan kunci1
.{'one':[1]}
.[1]
adalah nilai yang valid tetapi bukan kunci yang valid.Lihat utas ini di milis python untuk diskusi tentang subjek.
sumber
res = dict(zip(a.values(), a.keys()))
sumber
atau bahkan lebih baik, tetapi hanya berfungsi di Python 3:
sumber
Jawaban terdepan saat ini mengasumsikan nilai-nilai unik yang tidak selalu terjadi. Bagaimana jika nilai tidak unik? Anda akan kehilangan informasi! Sebagai contoh:
kembali
{2: 'b', 3: 'a'}
.Informasi tentang
'c'
benar-benar diabaikan. Idealnya harus seperti itu{2: ['b','c'], 3: ['a']}
. Inilah yang dilakukan implementasi bawah.Python 2.x
Python 3.x
sumber
Cara lain untuk memperluas tanggapan Ilya Prokin adalah dengan menggunakan
reversed
fungsi tersebut.Intinya, kamus Anda diulang (menggunakan
.items()
) di mana setiap item adalah pasangan kunci / nilai, dan item tersebut ditukar denganreversed
fungsi. Ketika ini diteruskan kedict
konstruktor, itu mengubahnya menjadi pasangan nilai / kunci yang Anda inginkan.sumber
Saran perbaikan untuk jawaban Javier:
Alih-alih
d.keys()
Anda dapat menulis hanyad
, karena jika Anda membaca kamus dengan iterator, itu akan mengembalikan kunci kamus yang relevan.Ex. untuk perilaku ini:
sumber
Dapat dilakukan dengan mudah dengan pemahaman kamus:
sumber
.items()
mengembalikan daftar tupel dari(key, value)
.map()
menelusuri elemen daftar dan menerapkanlambda x:[::-1]
ke setiap elemennya (tupel) untuk membalikkannya, sehingga setiap tupel menjadi(value, key)
dalam daftar baru yang dikeluarkan dari peta. Terakhir,dict()
buat dikt dari daftar baru.sumber
lambda x:[::-1]
untuk setiap elemennya (tupel) untuk membalikkannya, sehingga setiap tupel menjadi (nilai, kunci) dalam daftar baru yang dikeluarkan dari peta. Terakhir, dict () membuat dikt dari daftar baru.Menggunakan loop : -
sumber
Jika Anda menggunakan Python3, ini sedikit berbeda:
sumber
Menambahkan solusi di tempat:
Di Python3, Anda harus menggunakan
list(d.keys())
karenadict.keys
mengembalikan tampilan kunci. Jika Anda menggunakan Python2,d.keys()
sudah cukup.sumber
Jawaban Hanan benar karena mencakup kasus yang lebih umum (jawaban lain agak menyesatkan bagi seseorang yang tidak menyadari situasi duplikat). Perbaikan jawaban Hanan menggunakan setdefault:
sumber