我有一个字典列表,具有以下形状:
xs = [ { 'date': 1 }, { 'date': 1 }, { 'date': 2 }, { 'date': 1 }, { 'date': 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中任何更简单和表达的方法吗?
答案 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}