在“Big_file.txt ”中,我想提取“用户A”的UID,它与“ Small_file.txt 中的UID不重复” STRONG>”。我写了下面的代码,但它似乎永远不会停止运行。那么,如何加快这个过程呢?非常感谢你:))
import json
uid_available = []
linesB = []
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.append(hash(line['uid']))
for line in open('E:/Big_file.txt'):
line = json.loads(line)
if hash(line['uid']) not in linesB and line['user'] == 'User A':
uid_available.append(line['uid'])
这是Big_file.txt格式(有1000万行):
{'uid': 111, 'user': 'User A'}
{'uid': 222, 'user': 'User A'}
{'uid': 333, 'user': 'User A'}
{'uid': 444, 'user': 'User B'}
{'uid': 555, 'user': 'User C'}
{'uid': 666, 'user': 'User C'}
这是Small_file.txt的格式(有几百万行):
{'uid': 333, 'user': 'User A'}
{'uid': 444, 'user': 'User B'}
{'uid': 555, 'user': 'User C'}
我期望的输出:
111
222
答案 0 :(得分:3)
查找列表中的项目需要O(n)
次。如果您使用dict
或set
,则可以将其改进为O(1)
。
您可以做的最短修改是:
linesB = []
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.append(hash(line['uid']))
linesB = set(linesB)
或做得对
linesB = set()
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.add(hash(line['uid']))