我有这样的字典:
id_dict = {'C1001': 'John','D205': 'Ben','501': 'Rose'}
这本词典有超过10000个键和值。我必须从一个有近500字的报告中搜索密钥并用值替换。 我必须在几分钟内处理成千上万的报告,因此速度和记忆对我来说非常重要。
这是我现在使用的代码:
str = "strings in the reports"
for key, value in id_dict.iteritems():
str = str.replace(key, value)
有没有比这更好的解决方案?
答案 0 :(得分:2)
在循环中使用str.replace
非常低效。一些论点:
str.replace
会替换单词内部,可能不是你想要的:ex:将“nut”替换为“eel”将“donut”改为“doeel”。我会将re.sub
与替换函数(作为lambda
)一起使用,匹配字边界的字母数字字符串(字母或数字)。
lambda将在字典中查找并返回单词(如果找到),否则返回原始单词,不替换任何内容,但由于所有内容都在re
模块中完成,因此执行速度更快。
import re
id_dict = {'C1001': 'John','D205': 'Ben','501': 'Rose'}
s = "Hello C1001, My name is D205, not X501"
result = re.sub(r"\b(\w+)\b",lambda m : id_dict.get(m.group(1),m.group(1)),s)
print(result)
打印:
Hello John, My name is Ben, not X501
(请注意,最后一个单词未放置,因为它只是部分匹配)