2015-04-08 225 views
0

我的词典列表清单得到最频繁的价值,具有这种形状:蟒蛇:字典中

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

我需要得到大多表示,在所有最流行的日期的日期字典

我的做法是:

  1. 排序按日期列出按日期
  2. 获得MAX()比较组长度

例如:

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

是否有这些字典其它键,或者是输出'{ '日期':1}'足够? –

+0

还有其他键,但无关 – JackNova

回答

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]直接,如果你有兴趣in是该日期值。

演示:

>>> 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} 
+1

为什么包含'[1]'? '[0]'似乎更合适。 – Joost

+3

@Joost:我需要咖啡因。现在去取一些。 –