gpt4 book ai didi

python - 按键对项目进行分组?

转载 作者:太空狗 更新时间:2023-10-30 01:16:10 26 4
gpt4 key购买 nike

我觉得 Python 应该有一个内置的功能来执行此操作。获取项目列表并将它们转换为字典,将键映射到具有相同键的项目列表。

这很容易做到:

# using defaultdict
lookup = collections.defaultdict(list)
for item in items:
lookup[key(item)].append(item)

# or, using plain dict
lookup = {}
for item in items:
lookup.setdefault(key(item), []).append(item)

但是这种用例足够频繁,内置函数会很好。我可以自己实现它,如下所示:

def grouped(iterable, key):
result = {}
for item in iterable:
result.setdefault(key(item), []).append(item)
return result

lookup = grouped(items, key)

这在几个重要方面与 itertools.groupby 不同。要从 groupby 获得相同的结果,您必须这样做,这有点难看:

lookup = dict((k, list(v)) for k, v in groupby(sorted(items, key=key), key))

一些例子:

>>> items = range(10)
>>> grouped(items, lambda x: x % 2)
{0: [0, 2, 4, 6, 8], 1: [1, 3, 5, 7, 9]}

>>> items = 'hello stack overflow how are you'.split()
>>> grouped(items, len)
{8: ['overflow'], 3: ['how', 'are', 'you'], 5: ['hello', 'stack']}

有没有更好的办法?

最佳答案

我也将这个问题发布到 comp.lang.python,并且一致认为这实际上并不常见,不足以保证内置函数。因此,最好使用显而易见的方法。它们有效且可读。

# using defaultdict
lookup = collections.defaultdict(list)
for item in items:
lookup[key(item)].append(item)

# or, using plain dict
lookup = {}
for item in items:
lookup.setdefault(key(item), []).append(item)

我本来打算删除我的问题,但我还是把它留在这里,以防有人在寻找信息时偶然发现它。

关于python - 按键对项目进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575776/

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