Membuat kamus baru dengan Python


454

Saya ingin membangun kamus dengan Python. Namun, semua contoh yang saya lihat adalah instantiating kamus dari daftar, dll. ..

Bagaimana cara membuat kamus kosong baru dengan Python?

Jawaban:


661

Panggilan dicttanpa parameter

new_dict = dict()

atau cukup menulis

new_dict = {}

39
Apakah ada perbedaan antara dict () dan {}? Atau apakah orang lebih suka satu daripada yang lain?
Matt

52
@ Matt Rupanya CPython 2.7 dict () lebih lambat (6 kali lebih lambat?), Lihat: doughellmann.com/2012/11/... Bagaimanapun juga saya mulai lebih suka sintaks konstruktor karena saya merasa lebih mudah untuk mengetik dan memindahkan kode antara dikte dan panggilan fungsi.
David Wheaton

16
Saya mengonfirmasi 3 kali lebih cepat untuk menggunakan {} daripada dict () dalam python 3.x
Alex Azazel

8
Ya, saya mendapatkan sekitar 4 kali lebih cepat dalam python 3.6 untuk {}lebih dict()dan 5 kali untuk []lebih list().
Michael Hall

10
Dalam sebagian besar kasus, tidak masalah jika dibutuhkan enam kali lebih lama, karena itu masih sangat kecil.
hypehuman

247

Kamu bisa melakukan ini

x = {}
x['a'] = 1

107
+1 untuk pertanyaan logis berikutnya tentang cara menambahkan elemen baru ke dalamnya
Matt Klein

27

Mengetahui cara menulis kamus prasetel juga berguna untuk diketahui:

cmap =  {'US':'USA','GB':'Great Britain'}

# Explicitly:
# -----------
def cxlate(country):
    try:
        ret = cmap[country]
    except KeyError:
        ret = '?'
    return ret

present = 'US' # this one is in the dict
missing = 'RU' # this one is not

print cxlate(present) # == USA
print cxlate(missing) # == ?

# or, much more simply as suggested below:

print cmap.get(present,'?') # == USA
print cmap.get(missing,'?') # == ?

# with country codes, you might prefer to return the original on failure:

print cmap.get(present,present) # == USA
print cmap.get(missing,missing) # == RU

4
Poin bagus! Tapi saya pikir sedikit dengan cxlatemembuat jawaban Anda tampak terlalu rumit. Saya hanya akan menyimpan bagian inisialisasi. ( cxlateitu sendiri terlalu rumit. Anda bisa saja return cmap.get(country, '?').)
Daniel Darabos

Pertimbangkan untuk menggunakan docs.python.org/2/library/... alih-alih menulis fungsi terjemahan atau menggunakan .get () di mana saja.
Sparr

1
Mungkin saya akan melakukannya, kecuali bahwa dokumentasinya benar-benar buram bagi saya - mengerikan. Saya tidak tahu apa yang mereka perintahkan kepada saya untuk dilakukan, atau mengapa saya harus melakukannya. Dan .get () tampaknya melakukan hal yang tepat - plus itu sangat fleksibel. Saya yakin ini adalah kurangnya pemahaman di pihak saya. Dengan mengingat hal itu, pertanyaan saya adalah: mengapa repot? Apa yang disimpan di sini, lebih mudah di sini, lebih cepat di sini, dll.? Manfaatnya persis apa?
fyngyrz

1
Tidak terkait, tetapi Anda harus secara eksplisit menangkap KeyErrorbukannya telanjang kecuali (yang akan menangkap hal-hal seperti KeyboardInterruptdan SystemExit).
Arnav Borborah

Arnav, ya tentu saja kamu benar. Diedit sesuai. Terima kasih!
fyngyrz

19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Akan menambah nilai dalam kamus python.


15
d = dict()

atau

d = {}

atau

import types
d = types.DictType.__new__(types.DictType, (), {})

Apa perbedaan antara types.DictType.__new__(types.DictType, (), {})dan hanya{}

2
Bagi siapa pun yang membaca ini: "solusi" terakhir adalah sedikit lelucon - Anda dapat menggunakannya (dalam python 2.x setidaknya - tidak akan bekerja di py3k), tetapi tidak ada seorang pun di pikirannya yang ingin melakukannya jadi ;-)
bruno desthuilliers


4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

pertanyaannya menyatakan bahwa kamus seharusnya menjadi contoh kosong yang baru
Wesam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.