2015-04-08 290 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:我需要咖啡因。現在去取一些。 –