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

Jac*_*ova 0 python

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

xs = [ { 'date': 1 }, { 'date': 1 }, { 'date': 2 }, { 'date': 1 }, { 'date': 4 }]
Run Code Online (Sandbox Code Playgroud)

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

我的方法是:

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

例子:

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中更简单、更具表现力的方法吗?

Mar*_*ers 7

使用一个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)

  • @Joost:我需要咖啡因。现在要去拿一些。 (5认同)