gpt4 book ai didi

Python 多处理列表字典比较

转载 作者:行者123 更新时间:2023-11-30 23:31:15 33 4
gpt4 key购买 nike

我有一个包含 700,000 个项目的列表,一个包含 300,000 个键的字典。 300k 个键中的一些包含在列表中存储的 700k 个项目中。现在,我已经构建了一个简单的比较和处理循环:

# list contains about 700k lines - ids,firstname,lastname,email,lastupdate
list = open(r'myfile.csv','rb').readlines()
dictionary = {}
# dictionary contains 300k ID keys
dictionary[someID] = {'first':'john',
'last':'smith',
'email':'john.smith@gmail.com',
'lastupdate':datetime_object}
for line in list:
id, firstname, lastname, email, lastupdate = line.split(',')
lastupdate = datetime.datetime.strptime(lastupdate,'%Y-%m-%d %H:%M:%S')
if id in dictionary.keys():
# update dictionary[id]'s keys:values
if lastupdate > dictionary[id]['lastupdate']:
# update values in dictionary[id]
else:
# create new id inside dictionary and fill with keys:values

我希望加快速度并使用多重处理来完成此类工作。为此,我想我可以将列表拆分为四个较小的列表,Pool.map 每个列表,并使用我将创建四个新字典的四个过程中的每个过程分别检查它们。问题是,为了使用最后更新的值创建一整本字典,我将不得不使用 4 个新创建的字典重复该过程,依此类推。

有没有人遇到过这样的问题,并且有解决方案或解决该问题的想法?

谢谢

最佳答案

if id in dictionary.keys():

不!请不要!这是一个 O(n) 操作!!! 正确的方法很简单

if id in dictionary

这需要 O(1) 时间!!!

在考虑使用多处理等之前,您应该避免这种真正低效的操作。如果字典有 300k 个键,那么该行可能是瓶颈。

<小时/>

我假设了 python2;如果不是这种情况,那么您应该使用 。在 python3 中,使用 Dictionary.keys() 中的 key 的时间复杂度为 O(1),因为 .keys() 现在返回字典的 View 而不是键列表,但是省略.keys()仍然更快一点。

关于Python 多处理列表字典比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057250/

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