我正在尝试获取大型数据集并创建一个每个键包含多个数据点的字典。
例如,我有一个列表列表
names = [[2013, 'Patrick', 'M', 2566], [2013, 'Mary', 'F', 2602], [2013, 'Alice', 'F', 2915], [2013, 'Alberto', 'M', 581], [2012, 'Patrick', 'M', 2798], [2012, 'Mary', 'M', 6], [2012, 'Mary', 'F', 2559], [2012, 'Alice', 'M', 5], [2012, 'Alice', 'F', 2491], [2012, 'Alberto', 'M', 610], [2011, 'Patrick', 'M', 2858], [2011, 'Patrick', 'F', 5], [2011, 'Mary', 'F', 2700], [2011, 'Alice', 'F', 2190], [2011, 'Alberto', 'M', 660] ......]
我尝试创建字典,结果是
{ .... 'Patrick':[ ...., (2013, 'M', 2566), (2012, "M', 2798), ...], .....}
我的第一个通过是使用追加,如
d = {}
for year, key, gender, count in names:
d.setdefault(key, []).append(year)
d.setdefault(key, []).append(gender)
d.setdefault(key, []).append(count)
然而,这给了我一个字典,其数据没有被元组分隔。
答案 0 :(得分:2)
只需将它们作为元组附加。
这应该有效:
d = {}
for year, key, gender, count in names:
d.setdefault(key, []).append((year, gender, count))
答案 1 :(得分:1)
您可以使用defaultdict
来简化一些事情。
你的主要问题是你是单独追加每个元素,而是将一个元组附加到字典值(在这种情况下恰好是一个列表)。
from collections import defaultdict
names = [[2013, 'Patrick', 'M', 2566], [2013, 'Mary', 'F', 2602], [2013, 'Alice', 'F', 2915], [2013, 'Alberto', 'M', 581],
[2012, 'Patrick', 'M', 2798], [2012, 'Mary', 'M', 6], [2012, 'Mary', 'F', 2559], [2012, 'Alice', 'M', 5],
[2012, 'Alice', 'F', 2491], [2012, 'Alberto', 'M', 610], [2011, 'Patrick', 'M', 2858], [2011, 'Patrick', 'F', 5],
[2011, 'Mary', 'F', 2700], [2011, 'Alice', 'F', 2190], [2011, 'Alberto', 'M', 660]]
d = defaultdict(list)
for year, name, gender, count in names:
d[name].append((year, gender, count))