我想从列表中在python中构建一个dict,dict的键是第一列,map的值是第二列。有没有优雅的方法来实现这个?
例如,
A= [[1,2], [1,3], [2,3]]
结果是
M={1:[2,3],2:[3]}
我自己的方式是
for row in A:
if row[0] not in M: M[row[0]] = []
M[row[0]].append(row[1])
有没有更好的解决方案?功能编程方法是首选。
答案 0 :(得分:3)
执行此操作的一种方法是使用defaultdict
from collections import defaultdict
A= [[1,2], [1,3], [2,3]]
d = defaultdict(list)
for k, v in A:
d[k].append(v)
答案 1 :(得分:2)
您可以使用setdefault
:
A= [[1,2], [1,3], [2,3]]
M = {}
for k,v in A:
M.setdefault(k, []).append(v)
M
# {1: [2, 3], 2: [3]}
如果必须有效(免责声明:浪费,不推荐):
import operator, itertools
grps = itertools.groupby(sorted(A, key=operator.itemgetter(0)), operator.itemgetter(0))
M = {k: list(map(operator.itemgetter(1), v)) for k, v in grps}
M
# {1: [2, 3], 2: [3]}