gpt4 book ai didi

Python - 如何通过仅保留最新的元组来对元组列表进行重复数据删除。

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:24 28 4
gpt4 key购买 nike

我有一个数据集,其中每条记录都包含用户发布推文的日期、他们的屏幕名称、他们的关注者数量和他们的 friend 数量。用户可以在整个数据集中多次列出,并且在不同时间以及在这些不同时间具有不同的关注者/ friend 计数。我想做的是在列表中获取一个唯一的用户列表以及他们最近 的关注者/ friend 数。我不想只对他们的屏幕名称进行重复数据删除,而是我想要他们的最新值。

这是我的数据当前的样子,其中包含重复值

In [14]: data
Out[14]:
[(datetime.datetime(2014, 11, 21, 1, 16, 2), u'AlexMatosE', 773, 560),
(datetime.datetime(2014, 11, 21, 1, 17, 6), u'hedofthebloom', 670, 618),
(datetime.datetime(2014, 11, 21, 1, 18, 8), u'hedofthebloom', 681, 615),
(datetime.datetime(2014, 11, 21, 1, 19, 1), u'jape2116', 263, 540),
(datetime.datetime(2014, 11, 21, 1, 19, 3), u'_AlexMatosE', 790, 561),
(datetime.datetime(2014, 11, 21, 1, 19, 5), u'Buffmuff69', 292, 270),
(datetime.datetime(2014, 11, 21, 1, 20, 1), u'steveamodu', 140, 369),
(datetime.datetime(2014, 11, 21, 1, 20, 9), u'jape2116', 263, 540),
(datetime.datetime(2014, 11, 21, 1, 21, 3), u'chighway', 363, 767),
(datetime.datetime(2014, 11, 21, 1, 22, 9), u'jape2116', 299, 2000)]

这就是我获取数据中唯一身份用户的方法

In [15]: users = set(sorted([line[1] for line in data]))

现在我需要弄清楚如何为数据集中的每个唯一用户获取最新的一组值。我不确定 for 循环是否是到达此处的最佳方式,或者是否有其他更好的方式。

In [18]: most_recent_user_data = [] 
....: for line in data:
....: if line[1] in users:
....: ...
....: ...
....: ...
....: most_recent_user_data.append((line[1], line[2], line[3]))

最终,我想结束每个唯一用户一次,以及他们最近的关注者/ friend 值(value)

In [19]: most_recent_user_data
Out[19]:
(u'hedofthebloom', 681, 615),
(u'_AlexMatosE', 790, 561),
(u'Buffmuff69', 292, 270),
(u'steveamodu', 140, 369),
(u'chighway', 363, 767),
(u'jape2116', 299, 2000)]

最佳答案

您可以在 itertools 模块中使用 groupby 函数:

import datetime
import itertools

data = [(datetime.datetime(2014, 11, 21, 1, 16, 2), u'AlexMatosE', 773, 560),
(datetime.datetime(2014, 11, 21, 1, 17, 6), u'hedofthebloom', 670, 618),
(datetime.datetime(2014, 11, 21, 1, 18, 8), u'hedofthebloom', 681, 615),
(datetime.datetime(2014, 11, 21, 1, 19, 1), u'jape2116', 263, 540),
(datetime.datetime(2014, 11, 21, 1, 19, 3), u'_AlexMatosE', 790, 561),
(datetime.datetime(2014, 11, 21, 1, 19, 5), u'Buffmuff69', 292, 270),
(datetime.datetime(2014, 11, 21, 1, 20, 1), u'steveamodu', 140, 369),
(datetime.datetime(2014, 11, 21, 1, 20, 9), u'jape2116', 263, 540),
(datetime.datetime(2014, 11, 21, 1, 21, 3), u'chighway', 363, 767),
(datetime.datetime(2014, 11, 21, 1, 22, 9), u'jape2116', 299, 2000)]

# sorted record by name and datetime
data = sorted(data, key=lambda x: (x[1], x[0]), reverse=True)

# group by username and get the most recent user data
most_recent_user_data = [[(lambda x: (x[1], x[2], x[3]))(next(v)) for k, v in itertools.groupby(data, key=lambda x: x[1])]]

结果:

[('steveamodu', 140, 369),
('jape2116', 299, 2000),
('hedofthebloom', 681, 615),
('chighway', 363, 767),
('_AlexMatosE', 790, 561),
('Buffmuff69', 292, 270),
('AlexMatosE', 773, 560)]

关于Python - 如何通过仅保留最新的元组来对元组列表进行重复数据删除。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558927/

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