A.P*_*apa 2 python string dictionary python-3.x
我有以下句子
a = "you don't need a dog"
Run Code Online (Sandbox Code Playgroud)
和一本字典
dict = {"don't": "do not" }
Run Code Online (Sandbox Code Playgroud)
但我不能使用字典来使用下面的代码映射句子中的单词:
''.join(str(dict.get(word, word)) for word in a)
Run Code Online (Sandbox Code Playgroud)
输出:
"you don't need a dog"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这是一种方式.
a = "you don't need a dog"
d = {"don't": "do not" }
res = ' '.join([d.get(i, i) for i in a.split()])
# 'you do not need a dog'
Run Code Online (Sandbox Code Playgroud)
说明
d而不是dict.str.split按空格分割.str包含已经是字符串的值.str.join工作略好与列表理解与发电机的表达.所有答案都是正确的,但如果你的句子很长并且映射字典很小,你应该考虑迭代字典的项目(键值对)并将 str.replace 应用于原始句子。
其他人建议的代码。每个循环需要6.35 µs。
%%timeit
search = "you don't need a dog. but if you like dogs, you should think of getting one for your own. Or a cat?"
mapping = {"don't": "do not" }
search = ' '.join([mapping.get(i, i) for i in search.split()])
Run Code Online (Sandbox Code Playgroud)
让我们尝试使用 str.replace 代替。每个循环需要633 ns。
%%timeit
search = "you don't need a dog. but if you like dogs, you should think of getting one for your own. Or a cat?"
mapping = {"don't": "do not" }
for key, value in mapping.items():
search = search.replace(key, value)
Run Code Online (Sandbox Code Playgroud)
让我们使用 Python3 列表理解。所以我们得到了最快的版本,每个循环需要1.09 µs。
%%timeit
search = "you don't need a dog. but if you like dogs, you should think of getting one for your own. Or a cat?"
mapping = {"don't": "do not" }
search = [search.replace(key, value) for key, value in mapping.items()][0]
Run Code Online (Sandbox Code Playgroud)
你看出区别了吗?对于您的短句,第一个和第三个代码的速度大致相同。但是句子(搜索字符串)越长,性能差异就越明显。
结果字符串为:
'你不需要狗。但如果你喜欢狗,你应该考虑为自己养一只。还是一只猫?
备注: str.replace 也将替换长连接词中的出现。需要确保仅对完整单词进行替换。我想 str.replace 有一些选项。另一个想法是使用本帖中解释的正则表达式,因为它们也处理小写和大写。查找字典中的尾随空格不起作用,因为您不会在句子的开头或结尾找到出现的内容。
| 归档时间: |
|
| 查看次数: |
2870 次 |
| 最近记录: |