Python: list () в качестве значения по умолчанию для словаря

У меня есть код Python, который выглядит так:

if key in dict: dict[key].append(some_value) else: dict[key] = [some_value] 

но я считаю, что должен быть какой-то метод, чтобы обойти это утверждение «если». Я пытался

 dict.setdefault(key, []) dict[key].append(some_value) 

а также

 dict[key] = dict.get(key, []).append(some_value) 

но оба жалуются на «TypeError: unhashable type:« list »». Любые рекомендации? Благодаря!

One Solution collect form web for “Python: list () в качестве значения по умолчанию для словаря”

Лучший метод – использовать collections.defaultdict со list умолчанию:

 from collections import defaultdict dct = defaultdict(list) 

Затем просто используйте:

 dct[key].append(some_value) 

и словарь создаст для вас новый список, если ключ еще не отображен. collections.defaultdict является подклассом dict и ведет себя так же, как обычный объект dict .

При использовании стандартного dict , dict.setdefault() правильно устанавливает dct[key] для вас по умолчанию, так что версия должна работать нормально. Вы можете .append() этот вызов с помощью .append() :

 >>> dct = {} >>> dct.setdefault('foo', []).append('bar') # returns None! >>> dct {'foo': ['bar']} 

Однако, используя dct[key] = dct.get(...).append() вы заменяете значение для dct[key] выходным .append() , который является None .

  • Модуль Python с доступом к английским словарям, включая определения слов
  • Как фильтровать словарь в соответствии с произвольной функцией условия?
  • Выражения генератора Python
  • Передача словаря функции в python в качестве параметров ключевого слова
  • heapq с обычным предикатом сравнения
  • Доступ к словарям VS Доступ к полкам
  • Добавление одного символа для добавления ключей в счетчик
  • Получить ключ dict по максимальному значению
  • Python - лучший язык программирования в мире.