Создание нового словаря в 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

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

4
Хорошая точка зрения! Но я думаю, что немного с cxlateтвоим ответом кажется слишком сложным. Я бы просто сохранил часть инициализации. ( cxlateсамо по себе слишком сложно. Вы могли бы просто return cmap.get(country, '?').)
Даниэль Дарабос

Попробуйте написать docs.python.org/2/library/… вместо написания функции перевода или везде использовать .get ().
Спарр

1
Возможно, я бы, за исключением того, что документация абсолютно непрозрачна для меня - это ужасно. Я понятия не имею, что они говорят мне делать, или почему я должен это делать. И .get (), кажется, делает именно то, что нужно - плюс он очень гибкий. Я уверен, что это отсутствие понимания с моей стороны. Имея это в виду, мои вопросы: зачем? Что здесь сохраняется, здесь легче, здесь быстрее и т. Д.? Выгода именно то, что?
fyngyrz

1
Не связано, но вы должны явно поймать KeyErrorвместо голого, кроме (который будет ловить такие вещи, как KeyboardInterruptи SystemExit).
Арнав Борбора

Арнав, да, конечно, ты прав. Отредактировано соответственно. Спасибо!
fyngyrz


15
d = dict()

или

d = {}

или

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

Какая разница между types.DictType.__new__(types.DictType, (), {})и просто{}

2
Для тех, кто читает это: последнее «решение» - это шутка - вы можете использовать его (по крайней мере, в python 2.x - не будет работать в py3k), но никто в своем уме никогда не захочет так ;-)
bruno desthuilliers


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


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

в вопросе говорится, что в словаре должен быть новый пустой экземпляр
Wesam
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.