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?

leora
sumber

Jawaban:

661

Panggilan dicttanpa parameter

new_dict = dict()

atau cukup menulis

new_dict = {}
Jan Vorcak
sumber
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
TJD
sumber
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
fyngyrz
sumber
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.

Atul Arvind
sumber
15
d = dict()

atau

d = {}

atau

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
sumber
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
6

Jadi ada 2 cara untuk membuat dict:

  1. my_dict = dict()

  2. my_dict = {}

Tapi dari dua opsi {}ini lebih efisien daripada dict()plus yang bisa dibaca. PERIKSA DI SINI

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


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
sudhir tataraju
sumber
pertanyaannya menyatakan bahwa kamus seharusnya menjadi contoh kosong yang baru
Wesam