gpt4 book ai didi

python - 在python中使用字典用id替换字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:02 25 4
gpt4 key购买 nike

我有一个字典文件,每行包含一个单词。

标题排序.txt

 a&a    
a&b
a&c_bus
a&e
a&f
a&m
....

对于每个单词,其行号是单词的 id。

然后我有另一个文件,其中包含一组在每行中用制表符分隔的单词。

a.txt

 a_15   a_15_highway_(sri_lanka)    a_15_motorway   a_15_motorway_(germany) a_15_road_(sri_lanka)

如果字典中存在,我想用 id 替换所有单词,这样输出看起来像,

    3454    2345    123   5436     322 .... 

所以我写了这样的 python 代码来做到这一点:

 f = open("titles-sorted.txt")
lines = f.readlines()
titlemap = {}
nr = 1
for l in lines:
l = l.replace("\n", "")
titlemap[l.lower()] = nr
nr+=1

fw = open("a.index", "w")
f = open("a.txt")
lines = f.readlines()
for l in lines:
tokens = l.split("\t")
if tokens[0] in titlemap.keys():
fw.write(str(titlemap[tokens[0]]) + "\t")
for t in tokens[1:]:
if t in titlemap.keys():
fw.write(str(titlemap[t]) + "\t")
fw.write("\n")

fw.close()
f.close()

但是这段代码慢得离谱,所以我怀疑我是否做对了一切。

这是一种有效的方法吗?

最佳答案

write 循环包含大量对write 的调用,通常效率很低。您可以通过每行只写一次(或者如果文件足够小,则每个文件一次)来加快速度

tokens = l.split("\t")
fw.write('\t'.join(fw.write(str(titlemap[t])) for t in tokens if t in titlemap)
fw.write("\n")

甚至:

lines = []
for l in f:
lines.append('\t'.join(fw.write(str(titlemap[t])) for t in l.split('\t') if t in titlemap)
fw.write('\n'.join(lines))

此外,如果您的标记被多次使用,您可以通过在阅读时将它们转换为字符串来节省时间:

titlemap = {l.strip().lower(): str(index) for index, l in enumerate(f, start=1)}

关于python - 在python中使用字典用id替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34951158/

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