我很努力地找到一個令人信服的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}]
對我很好。爲了實現,請參閱itertools源代碼,這些源代碼可在Python發行版中使用:) –
爲什麼'list.append',當您可以「屈服」或等價使用列表解析? – 2013-01-03 21:53:25
Tinctorius,請你張貼一些示例代碼?對於產量或列表解析來使這項工作更好? – John