【发布时间】:2016-09-06 11:03:17
【问题描述】:
在“Big_file.txt”中,我想提取与“Small_file.txt中的UID不重复的“User A”的UID强>”。我编写了以下代码,但它似乎永远不会停止运行。那么,如何加快进程呢?非常感谢:)
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
【问题讨论】:
-
使用字典,你会显着加快
not in的查找速度。 -
您可以使用
set而不是list来附加值以跳过检查是否存在重复项。 -
@spectras 和 vishes_shell 非常感谢你帮助我 :)