Для словаря списков рассмотрите defaultdict
.
A нормальный словарь работает нормально, но вызывает ошибку, если ключ не найден.
list1 = list("abcd")
list2 = [1, 2, 3, 4]
d = {"list1": list1, "list2": list2}
d["list3"]
# KeyError: 'list3'
Это может быть разрушительным в некоторых приложениях и может потребовать дополнительной обработки исключений.
defaultdict
ведет себя как обычный диктофон, добавляя некоторую защиту от ошибок.
import collections as ct
dd = ct.defaultdict(list)
dd.update(d)
dd
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
Добавление недостающего ключа будет вызывать функцию по умолчанию на заводе, т.е. list
. Здесь вместо ошибки мы получаем пустой контейнер:
dd["list3"]
# []
Эта запись была добавлена с пустым списком.
dd
# defaultdict(list,
# {'list1': ['a', 'b', 'c', 'd'],
# 'list2': [1, 2, 3, 4],
# 'list3': []})
Преобразование defaultdict
в обычный Словаре, установив завод по умолчанию None
dd.default_factory = None
dd
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
или с помощью dict()
встроенной команды:
dict(dd)
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}
Вы должны использовать фигурные, а не квадратные скобки , но в противном случае это, вероятно, так же хорошо, как и получается. – NPE