我有一个字典列表,具有以下形状:
xs = [ { 'date': 1 }, { 'date': 1 }, { 'date': 2 }, { 'date': 1 }, { 'date': 4 }]
Run Code Online (Sandbox Code Playgroud)
我需要获取最有代表性的日期,即所有词典中最受欢迎的日期
我的方法是:
例子:
sorted_xs = sorted(xs, key=lambda x: x['date'])
ys = groupby(sorted_xs, lambda x: x['date'])
???
Run Code Online (Sandbox Code Playgroud)
这不起作用(而且很丑):
max(list(groupby(sorted_xs, lambda x: x['date'])), key=lambda (k, x):len(list(x)))
Run Code Online (Sandbox Code Playgroud)
你知道Python中更简单、更具表现力的方法吗?
使用一个collections.Counter()对象来计算每个日期:
from collections import Counter
date_counts = Counter(d['date'] for d in xs)
most_common = {'date': date_counts.most_common(1)[0][0]}
Run Code Online (Sandbox Code Playgroud)
我假设您想在这里再次以字典的形式获取输出,但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}
Run Code Online (Sandbox Code Playgroud)