gpt4 book ai didi

python - 在 Python 中最有效地迭代大型字典列表

转载 作者:行者123 更新时间:2023-11-30 22:07:55 25 4
gpt4 key购买 nike

我已经看到了类似问题的一些答案,但我不确定它们是解决我的问题的最佳方法。

我有一个非常大的表(100,000 多行,20 多列)被作为字典列表处理。我需要使用比较来对该列表进行部分重复数据删除。我在下面简化了我现在正在做的事情的示例。

table = [
{ "serial": "111", "time": 1000, "name": jon },
{ "serial": "222", "time": 0900, "name": sal },
{ "serial": "333", "time": 1100, "name": tim },
{ "serial": "444", "time": 1300, "name": ron },
{ "serial": "111", "time": 1300, "name": pam }
]

for row in table:
for row2 in table:
if row != row2:
if row['serial'] == row2['serial']:
if row['time'] > row2['time']:
action

这个方法确实有效(显然简化了,只是为该部分编写了“操作”),但我的问题是是否有一种更有效的方法可以到达我想要的“行”,而不必双重迭代整个过程 table 。我没有办法必然预测列表中匹配行的位置,但在这种情况下它们将列在相同的“序列”下。

我对 Python 比较陌生,效率是这里的目标。截至目前,由于迭代的行数较多,需要很长时间才能完成,我确信有一种更有效的方法来完成此操作,我只是不确定从哪里开始。

感谢您的帮助!

最佳答案

您可以使用 serial 作为主键,以 time 作为辅助键,以相反的顺序对表进行排序(以便重复项中的后者优先) ,然后迭代排序列表并仅对每个不同 serial 的第一个字典执行操作:

from operator import itemgetter
table = [
{ "serial": "111", "time": "1000", "name": "jon" },
{ "serial": "222", "time": "0900", "name": "sal" },
{ "serial": "333", "time": "1100", "name": "tim" },
{ "serial": "444", "time": "1300", "name": "ron" },
{ "serial": "111", "time": "1300", "name": "pam" }
]
last_serial = ''
for d in sorted(table, key=itemgetter('serial', 'time'), reverse=True):
if d['serial'] != last_serial:
action(d)
last_serial = d['serial']

关于python - 在 Python 中最有效地迭代大型字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341055/

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