gpt4 book ai didi

python - 为每个唯一值创建列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:18 25 4
gpt4 key购买 nike

我目前正在查看具有以下结构的表。

uid | action
1 | A1
1 | A1
1 | A1
1 | A4
2 | A1
2 | A8
2 | A9
3 | A3
3 | A7

我正在尝试创建具有以下结构的多维数组。

[[A1, A1, A1, A4], [A1, A8, A9], [A3, A7]] 

我的想法是跟踪 uid 并将操作附加到列表中,直到 uid 键发生变化。一旦 uid 键发生变化,所有的操作都将附加到另一个数组,并且跟踪的 uid 将更改为新的 uid

我使用 itertools.groupby() 提出了一个有点夸大和不正确的解决方案,但我对此并不满意,正在寻找更简单的方法。但是,我已经考虑到了这个问题,并提出了更复杂的解决方案。

如有任何提示,我们将不胜感激。

代码:

data = []
for i, j in itertools.groupby(table, key=lambda x: x['uid']):
event_array = []
for k in list(j):
event_array.append(k['action'])
data.append([i, event_array])

最佳答案

根据 OP's comment ,

@Black Are you sure that the data is ordered?

... @thefourtheye, yes pretty sure as I've had to write it in sql before reading it into python

由于数据已经排序,比如像这样

>>> data = [{'action': 'A1', 'uid': 1},
... {'action': 'A1', 'uid': 1},
... {'action': 'A1', 'uid': 1},
... {'action': 'A4', 'uid': 1},
... {'action': 'A1', 'uid': 2},
... {'action': 'A8', 'uid': 2},
... {'action': 'A9', 'uid': 2},
... {'action': 'A3', 'uid': 3},
... {'action': 'A7', 'uid': 3}]

你可以简单地使用 groupby 本身,使用嵌套列表理解,就像这样

>>> [[k['action'] for k in j] for i, j in groupby(data, key=lambda x: x['uid'])]
[['A1', 'A1', 'A1', 'A4'], ['A1', 'A8', 'A9'], ['A3', 'A7']]

关于python - 为每个唯一值创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29098777/

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