在不合并元组的情况下将多个元组添加到单个字典键中?

时间:2014-10-13 14:29:39

标签: python dictionary append

我正在尝试获取大型数据集并创建一个每个键包含多个数据点的字典。

例如,我有一个列表列表

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)

然而,这给了我一个字典,其数据没有被元组分隔。

2 个答案:

答案 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))