【问题标题】:How can I do comparison in List of dictionaries for key values?如何在字典列表中对键值进行比较?
【发布时间】:2011-06-01 06:37:29
【问题描述】:

我在下面有这个字典列表。我想要的是搜索相同的“别名”并添加他们的分数以将它们组合成一个字典并制作一个更清晰的列表。

d=[{"alias": "2133232", "score": 144}, {"alias": "u234243", "score": 34}, {"alias": "u234243", "score": 34},{"alias": "2133232", "score": 14}, {"alias": "u234243", "score": 4}, {"alias": "u234243", "score": 344}]

输出应如下所示:

`[{"alias": "2133232", "score": 158}, {"alias": "u234243", "score": 416}]`

【问题讨论】:

    标签: python list search


    【解决方案1】:

    Python 2.5:

    from collections import defaultdict 
    
    h = defaultdict(int)
    for i in d:
        h[i['alias']] += i['score']
    

    【讨论】:

      【解决方案2】:
      from itertools import groupby
      from operator import itemgetter
      dict(((u, sum(row['score'] for row in rows)) for u, rows in
          groupby(sorted(d, key=itemgetter('alias')), key=itemgetter('alias'))))
      # {'2133232': 158, 'u234243': 416}
      

      【讨论】:

        【解决方案3】:

        在 Python 3.1+ 中:

        import collections
        res = collections.Counter()
        for dct in d:
           res[dct['alias']] += dct['score']
        print(repr(res))
        

        在 3.1 之前,您可以使用 this Counter class,将 Counter() 替换为 collections.defaultdict(int)(2.5+),或者如下:

        res = {}
        for dct in d:
           alias = dct['alias']
           if alias not in res:
              res[alias] = 0
           res[alias] += dct['score']
        print(repr(res))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-21
          • 2020-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-24
          • 1970-01-01
          相关资源
          最近更新 更多