use*_*165 11 python python-itertools
我有这些数据:
self.data = [(1, 1, 5.0),
(1, 2, 3.0),
(1, 3, 4.0),
(2, 1, 4.0),
(2, 2, 2.0)]
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时:
for mid, group in itertools.groupby(self.data, key=operator.itemgetter(0)):
Run Code Online (Sandbox Code Playgroud)
因为list(group)我得到:
[(1, 1, 5.0),
(1, 2, 3.0),
(1, 3, 4.0)]
Run Code Online (Sandbox Code Playgroud)
这就是我想要的.
但是,如果我使用1而不是0
for mid, group in itertools.groupby(self.data, key=operator.itemgetter(1)):
Run Code Online (Sandbox Code Playgroud)
按元组中的第二个数字分组,我只得到:
[(1, 1, 5.0)]
Run Code Online (Sandbox Code Playgroud)
即使有其他元组在1(第二)位置有"1".
unu*_*tbu 23
itertools.groupby使用相同的密钥收集连续的项目.如果您想要所有具有相同键的项目,则必须先排序self.data.
for mid, group in itertools.groupby(
sorted(self.data,key=operator.itemgetter(1)), key=operator.itemgetter(1)):
Run Code Online (Sandbox Code Playgroud)
Kos*_*kov 20
没有排序的变体(通过字典).应该是更好的表现.
def full_group_by(l, key=lambda x: x):
d = defaultdict(list)
for item in l:
d[key(item)].append(item)
return d.items()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11102 次 |
| 最近记录: |