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

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