Преобразование списка с повторными ключами в словарь списков

У меня есть list ассоциаций с повторяющимися ключами:

 l = [(1, 2), (2, 3), (1, 3), (2, 4)] 

и я хочу, чтобы dict со значениями list :

 d = {1: [2, 3], 2: [3, 4]} 

Могу ли я сделать лучше, чем:

 for (x,y) in l: try: z = d[x] except KeyError: z = d[x] = list() z.append(y) 

2 Solutions collect form web for “Преобразование списка с повторными ключами в словарь списков”

Вы можете использовать метод dict.setdefault() для предоставления пустого списка по умолчанию для отсутствующих ключей:

 for x, y in l: d.setdefault(x, []).append(y) 

или вы можете использовать объект defaultdict() для создания пустых списков для отсутствующих ключей:

 from collections import defaultdict d = defaultdict(list) for x, y in l: d[x].append(y) 

но чтобы отключить поведение автообмена, вам нужно установить атрибут default_factory в None :

 d.default_factory = None # switch off creating new lists 

Вы можете использовать collections.defaultdict :

 d = collections.defaultdict(list) for k, v in l: d[k].append(v) 
  • Как использовать понимание списка, чтобы добавить элемент в копии словаря?
  • В Python существует ли сжатый способ использования понимания списка с несколькими итераторами?
  • Как создать список Python lambdas (в понимании списка / для цикла)?
  • Как рекурсивно запрашивать в django эффективно?
  • Создание словаря со списком в Python
  • диапазон (len (список)) или перечислить (список)?
  • Путаница с пониманием лямбды и списка
  • Python вложенное понимание dict с наборами
  • Python - лучший язык программирования в мире.