Создание нового словаря в Python

454

Я хочу построить словарь в Python. Тем не менее, все примеры, которые я вижу, - создание словаря из списка и т. Д. ..

Как мне создать новый пустой словарь в Python?

Лиора
источник

Ответы:

661

Звоните dictбез параметров

new_dict = dict()

или просто напиши

new_dict = {}
Ян Ворчак
источник
39
Есть ли разница между dict () и {}? Или люди просто предпочитают одно другому?
Мэтт
52
@ Matt По-видимому, CPython 2.7 dict () медленнее (в 6 раз медленнее?), См .: doughellmann.com/2012/11/… В любом случае я все равно предпочитаю синтаксис конструктора, так как мне легче набирать и перемещать код между диктовками и вызовами функций.
Дэвид Уитон
16
Я подтверждаю, что в 3 раза быстрее использовать {}, чем dict () в python 3.x
Алекс Азазель
8
Да, я получаю примерно в 4 раза быстрее питон 3.6 для {}более dict()и 5 раз для []более list().
Майкл Холл
10
В подавляющем большинстве случаев это не имеет значения, если это займет шесть раз дольше, поскольку это все еще незаметно малое количество времени.
Гипхуман человек
247

Ты можешь сделать это

x = {}
x['a'] = 1
Tjd
источник
107
+1 к следующему логическому вопросу о том, как добавить новый элемент к нему
Мэтт Кляйн
27

Знать, как написать предустановленный словарь, полезно знать также:

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
источник
4
Хорошая точка зрения! Но я думаю, что немного с cxlateтвоим ответом кажется слишком сложным. Я бы просто сохранил часть инициализации. ( cxlateсамо по себе слишком сложно. Вы могли бы просто return cmap.get(country, '?').)
Даниэль Дарабос
Попробуйте написать docs.python.org/2/library/… вместо написания функции перевода или везде использовать .get ().
Спарр
1
Возможно, я бы, за исключением того, что документация абсолютно непрозрачна для меня - это ужасно. Я понятия не имею, что они говорят мне делать, или почему я должен это делать. И .get (), кажется, делает именно то, что нужно - плюс он очень гибкий. Я уверен, что это отсутствие понимания с моей стороны. Имея это в виду, мои вопросы: зачем? Что здесь сохраняется, здесь легче, здесь быстрее и т. Д.? Выгода именно то, что?
fyngyrz
1
Не связано, но вы должны явно поймать KeyErrorвместо голого, кроме (который будет ловить такие вещи, как KeyboardInterruptи SystemExit).
Арнав Борбора
Арнав, да, конечно, ты прав. Отредактировано соответственно. Спасибо!
fyngyrz
19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Добавит значение в словарь Python.

Атул Арвинд
источник
15
d = dict()

или

d = {}

или

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
источник
Какая разница между types.DictType.__new__(types.DictType, (), {})и просто{}
2
Для тех, кто читает это: последнее «решение» - это шутка - вы можете использовать его (по крайней мере, в python 2.x - не будет работать в py3k), но никто в своем уме никогда не захочет так ;-)
bruno desthuilliers
6

Итак, есть 2 способа создать диктовку:

  1. my_dict = dict()

  2. my_dict = {}

Но из этих двух вариантов {}эффективнее, чем dict()плюс его читабельность. ПРОВЕРЬТЕ ЗДЕСЬ

Вишваджит Патхак
источник
4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
судхир татараджу
источник
в вопросе говорится, что в словаре должен быть новый пустой экземпляр
Wesam