列表字典中元素的总计出现次数

时间:2015-05-07 02:21:50

标签: python list dictionary defaultdict

我有这个列表字典:

  d = {'Apple': [['Category1', 14], ['Category2', 12], ['Category2', 8]], 'Orange' : [['Category2', 12], ['Category2', 12], '[Category3', 2]]}

我希望输出如下:

   d = {'Apple': [['Category1', 14], ['Category2', 20]],'Orange': [['Category2', 24], ['Category3', 2]]}

具有相同名称的类别,即Category1, Category2将合并并合计。

我在考虑类似的伪代码:

output = defaultdict(set)
for key, value in d.items():
   for item in value:
      total += int(value[1])
      output[key].add(value[0],total)
   total = 0

由于

1 个答案:

答案 0 :(得分:0)

您的伪代码是错误的,因为您正在创建一个将密钥映射到集合的字典,而您确实需要一个将密钥映射到将密钥映射到计数的字符串的字典。

以下功能可以满足您的需求:

def tally_up(dct):
    totals = dict() # Maps keys to dicts of totals
    for key, tuples in dct.items():
        subtotals = collections.defaultdict(lambda: 0) # Maps keys to counts
        for subkey, count in tuples:
            subtotals[subkey] += count
        totals[key] = dict(subtotals)
    return totals