我正在努力在dict列表中找到一个令人信服的python方法来执行groupby,下面似乎有很好的可读性,但并不一定是最有效的方法:我必须先排序(groupby的先决条件),然后再执行groupby(这里还有一个问题,这是itertools中groupby是如何实现的……)。在
一个明显的选择是使用集合.defaultdict但我得做很多事列表.追加(和更少的Python?)。你们觉得哪个更好?或者还有其他更好的方法来分组?谢谢
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
是一种选择。我不确定“Python病”,但它似乎快了两倍(正如你所问的效率):相关问题 更多 >
编程相关推荐