Pertanyaan Buat kamus dengan pemahaman daftar dengan Python


Saya suka sintaks pemahaman daftar Python.

Apakah bisa digunakan untuk membuat kamus juga? Misalnya, dengan mengulangi lebih dari sepasang kunci dan nilai:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

1025
2017-11-17 10:07


asal


Jawaban:


Dalam Python 2.6 dan sebelumnya, konstruktor dikt dapat menerima iterable dari pasangan kunci / nilai:

d = dict((key, value) for (key, value) in iterable)

Dari Python 2.7 dan 3 dan seterusnya, Anda cukup menggunakan sintaks pemahaman dict langsung:

d = {key: value for (key, value) in iterable}

Tentu saja, Anda dapat menggunakan iterable dengan cara apa pun yang Anda inginkan (tupel dan daftar literal, pemahaman generator, pemahaman daftar, fungsi generator, komposisi fungsional ... merasa kreatif) selama setiap elemen merupakan iterable dari dua elemen:

d = {value: foo(value) for value in sequence if bar(value)}

def key_value_gen(k):
   yield chr(k+65)
   yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))

1573
2017-11-17 10:09



Dalam Python 3 dan Python 2.7+, kamus comprehensions terlihat seperti di bawah ini:

d = {k:v for k, v in iterable}

Untuk Python 2.6 atau versi sebelumnya, lihat jawaban fortran.


188
2017-11-17 10:22



Bahkan, Anda bahkan tidak perlu iterate over iterable jika sudah memahami beberapa jenis pemetaan, konstruktor dict melakukannya dengan baik untuk Anda:

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}

38
2018-05-31 17:48



Dalam Python 2.7, ia berjalan seperti:

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

Zip mereka!


28
2017-10-08 02:59



Untuk menambahkan ke jawaban @ fortran, jika Anda ingin beralih ke daftar kunci key_list serta daftar nilai value_list:

d = dict((key, value) for (key, value) in zip(key_list, value_list))

atau

d = {(key, value) for (key, value) in zip(key_list, value_list)}

13
2018-01-15 00:23



Buat kamus dengan pemahaman daftar dengan Python

Saya suka sintaks pemahaman daftar Python.

Apakah bisa digunakan untuk membuat kamus juga? Misalnya, dengan iterasi   lebih dari sepasang kunci dan nilai:

mydict = {(k,v) for (k,v) in blah blah blah}

Asumsi blah blah blah adalah iterable dari dua tupel - Anda begitu dekat. Mari kita buat beberapa "blah" seperti itu:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

Sintaks Pemahaman Dict:

Sekarang sintaksnya di sini adalah bagian pemetaan. Apa yang membuat ini dict pemahaman bukan set pemahaman (yang mendekati kode pseudo Anda) adalah titik dua, : seperti di bawah ini:

mydict = {k: v for k, v in blahs}

Dan sekarang ketika Anda melakukannya:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

Menambahkan Filter:

Sama seperti pemahaman daftar, Anda dapat menambahkan bagian filter ke bagian akhir:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

Di sini kita menguji apakah karakter terakhir habis dibagi 2.


10
2018-01-03 21:57



Untuk versi python <2.7, lakukan yang berikut:

d = dict((i,True) for i in [1,2,3])

Untuk versi python> = 2,7, lakukan yang berikut:

d = {i: True for i in [1,2,3]}

9
2018-06-26 09:05



Berikut ini contoh lain pembuatan kamus menggunakan pemahaman dict:

Apa yang saya lakukan di sini adalah membuat kamus alfabet di mana setiap pasangan; adalah huruf bahasa Inggris dan posisinya yang sesuai dalam abjad bahasa Inggris

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

Perhatikan penggunaan enumerasi di sini untuk mendapatkan daftar abjad dan indeksnya dalam daftar dan menukar abjad dan indeks untuk menghasilkan pasangan nilai kunci untuk kamus

Semoga ini memberikan ide kamus yang bagus untuk Anda dan mendorong Anda untuk menggunakannya lebih sering untuk membuat kode Anda ringkas


6
2017-10-25 03:40



Coba ini,

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

Asumsikan kita memiliki dua daftar negara dan modal

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

Kemudian buat kamus dari dua daftar:

print get_dic_from_two_lists(country, capital)

Hasilnya seperti ini,

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}

3
2018-02-03 14:15



Hanya untuk memberikan contoh lain. Bayangkan Anda memiliki daftar berikut:

nums = [4,2,2,1,3]

dan Anda ingin mengubahnya menjadi dikt di mana kuncinya adalah indeks dan nilai adalah elemen dalam daftar. Anda dapat melakukannya dengan baris kode berikut:

{index:nums[index] for index in range(0,len(nums))}

0
2018-05-27 00:11