Apakah ada cara di Python 2.7+ untuk membuat sesuatu seperti berikut ini?
{ something_if_true if condition else something_if_false for key, value in dict_.items() }
Saya tahu Anda bisa membuat apa saja hanya dengan 'jika':
{ something_if_true for key, value in dict_.items() if condition}
python
dictionary
dictionary-comprehension
diegueus9
sumber
sumber
dict
terbuat darikey:value
elemen, Anda tidak membangun didict
sini tetapi aset
(lihat himpunan literal ).Jawaban:
Anda sudah mendapatkannya:
A if test else B
adalah ekspresi Python yang valid. Satu-satunya masalah dengan pemahaman dict Anda seperti yang ditunjukkan adalah bahwa tempat untuk ekspresi dalam pemahaman dict harus memiliki dua ekspresi, dipisahkan oleh titik dua:if
Klausa terakhir bertindak sebagai filter, yang berbeda dari memiliki ekspresi kondisional.sumber
{(a if condition else b): value for key, value in dict.items()}
akan bekerja.Jawaban @ Marcin mencakup semuanya, tetapi kalau-kalau seseorang ingin melihat contoh aktual, saya tambahkan dua di bawah ini:
Katakanlah Anda memiliki kamus set berikut
dan Anda ingin membuat kamus baru yang kuncinya menunjukkan apakah string
'a'
tersebut terkandung dalam nilai atau tidak, Anda dapat menggunakanyang menghasilkan
Sekarang anggaplah Anda memiliki dua kamus seperti ini
dan Anda ingin mengganti kunci
d1
dengan kuncid2
jika ada nilai masing-masing identik, Anda bisa melakukannyapemberian yang mana
sumber
d1
,d2
saya mendapatkanAttributeError: 'dict_values' object has no attribute 'index'
Jika Anda memiliki kondisi yang berbeda untuk mengevaluasi kunci dan nilai, jawaban @ Marcin adalah cara yang harus dilakukan.
Jika Anda memiliki kondisi yang sama untuk kunci dan nilai, Anda lebih baik dengan membangun (kunci, nilai) -tupel dalam ekspresi generator yang memasukkan
dict()
:Lebih mudah dibaca dan kondisinya hanya dievaluasi sekali per kunci, nilainya.
Contoh dengan meminjam set kamus @ Cleb:
Asumsikan Anda ingin sufiks hanya
keys
dengana
di dalamnyavalue
dan Anda inginvalue
diganti dengan panjang set dalam kasus seperti itu. Jika tidak, pasangan nilai kunci harus tetap tidak berubah.sumber
Contoh lain dalam menggunakan if / else dalam pemahaman kamus
Saya bekerja pada aplikasi desktop entri data untuk pekerjaan kantor saya sendiri, dan itu umum untuk aplikasi entri data seperti itu untuk mendapatkan semua entri dari widget input dan membuangnya ke kamus untuk diproses lebih lanjut seperti validasi, atau mengedit yang harus kita kembalikan data yang dipilih dari file kembali ke widget entri, dll.
Babak pertama menggunakan coding tradisional (8 baris):
Babak kedua saya mencoba menggunakan pemahaman kamus tetapi loop masih ada (6 baris):
Akhirnya, dengan pernyataan pemahaman kamus satu baris (1 baris):
Saya menggunakan python 3.8.3
sumber