将元组列表转换为字典

elf*_*go1 32 python dictionary list

我正在寻找一种方法来转换像这样的元组列表:

[(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
Run Code Online (Sandbox Code Playgroud)

进入这样的字典:

{4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]}
Run Code Online (Sandbox Code Playgroud)

来自每个元组的第二个元素变为字典键,并且与该键相关联的所有第一元组元素都存储在值列表中.

你能告诉我怎么做吗?

S.L*_*ott 47

>>> from collections import defaultdict
>>> l= [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
>>> d= defaultdict( list )
>>> for v, k in l:
...     d[k].append(v)
... 
>>> d
defaultdict(<type 'list'>, {23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]})
>>> [ {k:d[k]} for k in sorted(d) ]
[{4: [1, 2, 3]}, {15: [4, 5, 9, 11, 12]}, {23: [6, 7, 8, 10]}]
Run Code Online (Sandbox Code Playgroud)


Fog*_*ird 13

>>> a = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
>>> b = {}
>>> for i, j in a:
...     b.setdefault(j, []).append(i)
...
>>> b
{23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]}
>>>
Run Code Online (Sandbox Code Playgroud)

  • @Steve Folly:看看collections.defaultdict.它甚至更好. (3认同)