gpt4 book ai didi

python - 如何在 python 中使用带有字典列表的计数器

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:42 26 4
gpt4 key购买 nike

有了这样的列表,我可以通过以下方式获得相同值的组:

N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
C = Counter(N)
print([[k, ] * v for k, v in C.items()])

得到如下结果。

[[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]

但是如果我有以下列表

N = [{'doc':'A','value':300,'W':1},{'doc':'B','value':301,'W':0.5},{'doc':'C','value':301,'W':0.45},{'doc':'D','value':301,'W':0.3},{'doc':'E','value':300,'W':1},]

我想按照上一个的方式分组,使用键'value'对它们进行分组,即:

[[{'doc':A,'value':300,'W':1}, {'doc':'E','value':300,'W':1}],[{'doc':'B','value':301,'W':0.5},{'doc':'C','value':301,'W':0.45},{'doc':'D','value':301,'W':0.3}]]

有人可以帮忙吗?

最佳答案

你可以使用 collections.defaultdict 来解决这个问题。

collections.Counter 仅对递增整数计数器有用,即便如此 only with hashable objects .这不是您要在此处执行的操作。

from collections import defaultdict

N = [{'doc':'A','value':300,'W':1}, {'doc':'B','value':301,'W':0.5},
{'doc':'C','value':301,'W':0.45}, {'doc':'D','value':301,'W':0.3},
{'doc':'E','value':300,'W':1},]

d = defaultdict(list)

for i in N:
d[i['value']].append(i)

res = list(d.values())

# [[{'W': 1, 'doc': 'A', 'value': 300}, {'W': 1, 'doc': 'E', 'value': 300}],
# [{'W': 0.5, 'doc': 'B', 'value': 301},
# {'W': 0.45, 'doc': 'C', 'value': 301},
# {'W': 0.3, 'doc': 'D', 'value': 301}]]

顺便说一句,这也为您的第一个问题提供了更直接的解决方案:

N = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

d = defaultdict(list)

for i in N:
d[i].append(i)

res = list(d.values())

# [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]

关于python - 如何在 python 中使用带有字典列表的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655779/

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