python:获取字典列表中最常用的值

时间:2015-04-08 09:42:18

标签: python

我有一个字典列表,具有以下形状:

xs = [ { 'date': 1 }, { 'date': 1 }, { 'date': 2 }, { 'date': 1 }, { 'date': 4 }]

我需要获取主要代表的日期,这是所有词典中最受欢迎的日期

我的方法是:

  1. 按日期对列表进行排序
  2. 按日期分组
  3. 获取max()比较组长度
  4. 示例:

    sorted_xs = sorted(xs, key=lambda x: x['date'])
    ys = groupby(sorted_xs, lambda x: x['date'])
    ???
    

    这不起作用(并且很难看):

    max(list(groupby(sorted_xs, lambda x: x['date'])), key=lambda (k, x):len(list(x)))
    

    你知道python中任何更简单和表达的方法吗?

1 个答案:

答案 0 :(得分:3)

使用collections.Counter() object计算每个日期:

from collections import Counter

date_counts = Counter(d['date'] for d in xs)
most_common = {'date': date_counts.most_common(1)[0][0]}

我假设你想在这里再次以字典的形式获得输出,但是你可以直接使用date_counts.most_common(1)[0][0]如果您感兴趣的是该日期值。

演示:

>>> from collections import Counter
>>> xs = [{'date': 1}, {'date': 1}, {'date': 2}, {'date': 1}, {'date': 4}]
>>> date_counts = Counter(d['date'] for d in xs)
>>> {'date': date_counts.most_common(1)[0][0]}
{'date': 1}