Python'da yeni bir sözlük oluşturma


454

Python'da sözlük oluşturmak istiyorum. Ancak gördüğüm tüm örnekler listeden bir sözlük oluşturuyor, vb. ..

Python'da nasıl yeni bir boş sözlük oluşturabilirim?

Yanıtlar:


661

dictParametresiz çağrı

new_dict = dict()

ya da sadece yaz

new_dict = {}

39
Dict () ve {} arasında herhangi bir fark var mı? Yoksa insanlar birini diğerini mi tercih ediyorlar?
Matt

52
Matt @ Anlaşılan CPython 2.7 dict () 'dir yavaş (6 kat daha yavaş?), Bakınız: doughellmann.com/2012/11/... Ben zaten yapıcı sözdizimi tercih başlıyorum Her durumda ben daha kolay yazıp hareket kodu bulmak beri dikte ve işlev çağrıları arasında.
David Wheaton

16
Python 3.x'te {} kullanmaktan dict () kullanmanın 3 kat daha hızlı olduğunu onaylıyorum
Alex Azazel

8
Evet, 4 kat daha hızlı piton 3.6'da yaklaşık almak {}üzerine dict()ve 5 kez []üzerinde list().
Michael Hall

10
Vakaların büyük çoğunluğunda, altı kat daha uzun sürmesi önemli değil, çünkü bu hala farkedilemeyecek kadar az bir zaman.
hypehuman

248

Bunu yapabilirsiniz

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

108
Yeni bir elemanın nasıl ekleneceğine dair bir sonraki mantıklı soru için +1
Matt Klein

27

Önceden ayarlanmış bir sözlüğün nasıl yazılacağını bilmek de bilmek yararlıdır:

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
İyi bir nokta! Ama bence biraz cxlateyanıtı çok karmaşık görünüyor. Başlatma kısmını saklıyorum. ( cxlatekendisi çok karmaşık. Sadece yapabilirsiniz return cmap.get(country, '?').)
Daniel Darabos

Bir çeviri işlevi yazmak veya her yerde .get () kullanmak yerine docs.python.org/2/library/… kullanmayı düşünün .
Sparr

1
Belgelerin benim için kesinlikle opak olması dışında, belki de çok kötü olurdu. Bana ne yapmamı söylediğini ya da neden yapmam gerektiğini bilmiyorum. Ve .get () tam olarak doğru şeyi yapıyor gibi görünüyor - artı son derece esnektir. Eminim bu benim açımdan anlayış eksikliği. Bunu aklımda tutarak, sorularım: neden rahatsız oluyorsunuz? Burada ne kaydedilir, burada daha kolay, burada daha hızlı vb. Faydası tam olarak nedir?
fyngyrz

1
İlgisiz, ama açıkça KeyError( KeyboardInterruptve gibi şeyleri yakalar) dışında çıplak yerine yerine yakalamak gerekir SystemExit.
Arnav Borborah

Arnav, evet tabii ki haklısın. Buna göre düzenlendi. Teşekkür ederim!
fyngyrz

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

Bu değeri python sözlüğüne ekler.


15
d = dict()

veya

d = {}

veya

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

types.DictType.__new__(types.DictType, (), {})Ve just arasındaki fark nedir{}

2
Bu okuyan herkes için: Geçen "çözüm" şaka biraz - sen yapabilirsiniz kullanabilirsiniz (piton 2.x en azından - olmaz Py3k çalışma), ama içinde hiç kimse kendi aklı hiç yapmak isteyeyim var so ;-)
bruno desthuilliers


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


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

soru, sözlüğün yeni ve boş bir örnek olması gerektiğini belirtir
Wesam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.