• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

pythonic方式做字典列表上的groupby(和有效?)

python 来源:John 10次浏览

我很努力地找到一个令人信服的pythonic方式来做一个列表字典,下面似乎有良好的可读性,但没有必要的最有效的方式:我必须首先排序(groupby的先决条件),然后通过(另一个问题在这里标记itertools中groupby的实现方式)进行组合。pythonic方式做字典列表上的groupby(和有效?)

一个明显的选择是使用collections.defaultdict,但我将不得不做很多list.append(并减少pythonic?)。哪一个你认为这是一个更好的选择?或者还有其他更好的方法来做群组?谢谢

from itertools import groupby 
from operator import itemgetter 

data = [ {'x':1, 'y':1}, 
     {'x':2, 'y':2}, 
     {'x':3, 'y':2}, 
     {'x':4, 'y':1}, ] 

sortedData = sorted(data, key=itemgetter('y')) 

for y, d in groupby(sortedData, itemgetter('y')): 
    print y, list(d) 

1 [{'y': 1, 'x': 1}, {'y': 1, 'x': 4}] 
2 [{'y': 2, 'x': 2}, {'y': 2, 'x': 3}] 


===========解决方案如下:

你已经知道defaultdict是一种选择。我不知道有关“pythonicness”,但它似乎是约快两倍(你问效):

from collections import defaultdict 
def f(l): 
    d = defaultdict(list) 
    for i in data: 
     d[i.get('y')].append(i) 
    return d 

%timeit f(data) 
100000 loops, best of 3: 3.7 us per loop 

%timeit {y:list(d) for y, d in groupby(sorted(data, key=itemgetter('y')), 
                 itemgetter('y'))} 
100000 loops, best of 3: 8.33 us per loop 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)