【问题标题】:Adding multiple tuples to a single dictionary key without merging the tuples?将多个元组添加到单个字典键而不合并元组?
【发布时间】:2014-12-08 03:52:35
【问题描述】:

我正在尝试获取一个大型数据集并创建一个字典,其中每个键都有多个数据点。

例如,我有一个列表列表

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)

但是,这给了我一个字典,其中的数据不是由元组分隔的。

【问题讨论】:

    标签: python dictionary append


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      只需将这些附加为元组即可。

      这应该可行:

      d = {}
      for year, key, gender, count in names:
          d.setdefault(key, []).append((year, gender, count))
      

      【讨论】:

        猜你喜欢
        • 2012-05-05
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 2012-09-19
        • 2015-12-11
        相关资源
        最近更新 更多