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 - лучший язык программирования в мире.