Saya berupaya untuk belajar Python, dan saya memperhatikan standar pengkodean umum. Ini mungkin tampak seperti pertanyaan yang sia-sia, tetapi saya mencoba untuk fokus pada praktik terbaik yang saya pelajari, jadi saya tidak perlu melepaskan kebiasaan 'buruk'.
Saya melihat dua metode umum untuk menginisialisasi dict:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Mana yang dianggap "lebih pythonic"? Yang mana yang kamu gunakan? Mengapa?
python
dictionary
daotoad
sumber
sumber
{}
cukup seragam, tetapi saya melihat banyakdict()
pendekatan eksplisit di tempat lain. Saya bisa melihat manfaat dari sintaksis eksplisit, tetapi tidak adanya pendekatan dalam dokumen resmi membuat saya curiga. Setelah memposting ini, saya melihat dokumen perpustakaan untukdict
dan menemukan peringatan bahwa kunci harus pengidentifikasi yang valid ketika secara eksplisitdict
digunakan untuk menginisialisasi dict.dict()
dieja - inidict
menggunakan nama tipe. Kawat gigi ({}
) mengandalkan tanda baca untuk mengidentifikasi jenisnya.Jawaban:
Kurung kurawal. Melewati argumen kata kunci
dict()
, meskipun berfungsi dengan baik dalam banyak skenario, hanya dapat menginisialisasi peta jika kunci adalah pengidentifikasi Python yang valid.Ini bekerja:
Ini tidak akan berfungsi:
sumber
Yang pertama, kurung kurawal. Jika tidak, Anda mengalami masalah konsistensi dengan kunci yang memiliki karakter aneh di dalamnya, seperti
=
.sumber
Versi pertama lebih disukai:
{1: 'one', 2: 'two'}
. Varian kedua hanya berfungsi untuk (beberapa) kunci string. Menggunakan berbagai jenis sintaks tergantung pada jenis kunci akan menjadi inkonsistensi yang tidak perlu.Lebih cepat:
sumber
Saya pikir opsi pertama lebih baik karena Anda akan mengakses nilai sebagai ['a'] atau ['lain']. Kunci dalam kamus Anda adalah string, dan tidak ada alasan untuk berpura-pura tidak. Bagi saya sintaksis kata kunci terlihat pintar pada awalnya, tetapi tidak jelas pada tampilan kedua. Ini hanya masuk akal bagi saya jika Anda bekerja dengan
__dict__
, dan kata kunci akan menjadi atribut nanti, seperti itu.sumber
FYI, jika Anda perlu menambahkan atribut ke kamus Anda (hal-hal yang dilampirkan ke kamus, tetapi bukan salah satu kunci), maka Anda akan membutuhkan bentuk kedua. Dalam hal ini, Anda dapat menginisialisasi kamus Anda dengan kunci yang memiliki karakter arbitrer, satu per satu, seperti:
sumber
Terkadang
dict()
merupakan pilihan yang baik:[random.randint (0,100) untuk rentang x (0,7)]))
sumber
Saya hampir selalu menggunakan kurung kurawal; namun, dalam beberapa kasus ketika saya sedang menulis tes, saya melakukan pengepakan / pembongkaran kata kunci, dan dalam kasus ini dict () jauh lebih mudah dikelola, karena saya tidak perlu mengubah:
untuk:
Ini juga membantu dalam beberapa keadaan di mana saya pikir saya mungkin ingin mengubahnya menjadi instanceeduple atau kelas contoh di lain waktu.
Dalam implementasi itu sendiri, karena obsesi saya pada optimasi, dan ketika saya tidak melihat manfaat pemeliharaan yang sangat besar, saya akan selalu memilih kurung kurawal.
Dalam tes dan implementasinya, saya tidak akan pernah menggunakan dict () jika ada kemungkinan bahwa kunci ditambahkan kemudian, atau di masa depan, akan:
dict(1foo=2)
menimbulkan SyntaxError)sumber