gpt4 book ai didi

python - 当键值在iterable的元素中时,如何使用itertools.groupby?

转载 作者:太空狗 更新时间:2023-10-29 21:17:54 26 4
gpt4 key购买 nike

为了说明,我从一个二元组列表开始:

import itertools
import operator

raw = [(1, "one"),
(2, "two"),
(1, "one"),
(3, "three"),
(2, "two")]

for key, grp in itertools.groupby(raw, key=lambda item: item[0]):
print key, list(grp).pop()[1]

产量:

1 one
2 two
1 one
3 three
2 two

试图调查原因:

for key, grp in itertools.groupby(raw, key=lambda item: item[0]):
print key, list(grp)

# ---- OUTPUT ----
1 [(1, 'one')]
2 [(2, 'two')]
1 [(1, 'one')]
3 [(3, 'three')]
2 [(2, 'two')]

即使这样也会给我相同的输出:

for key, grp in itertools.groupby(raw, key=operator.itemgetter(0)):
print key, list(grp)

我想得到这样的东西:

1 one, one
2 two, two
3 three

我认为这是因为键位于列表中的元组内,而实际上元组作为一个元组移动。有没有办法达到我想要的输出?也许 groupby() 不适合这个任务?

最佳答案

groupby 将可迭代对象的具有相同键的连续 元素聚类。要生成您想要的输出,您必须首先对 raw 进行排序。

for key, grp in itertools.groupby(sorted(raw), key=operator.itemgetter(0)):
print key, map(operator.itemgetter(1), grp)

# 1 ['one', 'one']
# 2 ['two', 'two']
# 3 ['three']

关于python - 当键值在iterable的元素中时,如何使用itertools.groupby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3440549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com