我想从一串值中替换一个子字符串。但是,替换一个没有任何字符串组的字符串并不容易。
我有这样的数据:
context.createBuffer(1, data.length, sample_rate);
答案 0 :(得分:1)
def wordreplace(s, d):
"""Replaces words in string by dict d. # Thank you @Patrick Artner
for improving dict call to d.get(w, w)!"""
return ' '.join([ d.get(w, w) for w in s.split()])
# this was my old version:
# def wordreplace(s, d):
# """Replaces words in string by dict d."""
# return ' '.join([ d[w] if w in d else w for w in s.split()])
d = {'blvd': 'Boulevard', 'st': "Street", 'sw': 'SW', 's': "S", 'rd': '
Road'}
s1 = "2341 blvd"
s2 = "648 s Kingston rd"
s3 = "sw Beverly st"
wordreplace(s1, d)
# '2341 Boulevard'
wordreplace(s2, d)
# '648 S Kingston Road'
wordreplace(s3, d)
# 'SW Beverly Street'
s.split()
默认情况下由单个空格拆分,从而返回字符串s的单词列表。每个单词都加载到变量w中。列表表达式的for w in s.split()
部分。
for
之前的部分确定结果列表中收集的内容。
if w in d
表示:测试该单词是否在给定的replacer-dictionary d
中。它查看d.keys()
字典的键。找到后,它将返回字典值d[w]
。 else
它会返回单词w
。
结果列表ist join
使用' '
作为加入元素,因此单词列表会重新转换为字符串。
列表表达式非常方便,并且经常导致这样的单行函数。所以,建议你学习它们。
您可以执行以下操作,而不是在字典表单中键入所有键值:
keys = [ # list here all keys ]
vals = [ # list here all corresponding values in the right order ]
d = {k: vals[i] for i, k in enumerate(keys)}
再次,您可以使用列表表达式的强大功能为它们生成字典。
# abstract it to a function
def lists2dict(keys_list, vals_list):
return {k, vals_list[i] for i, k in enumerate(key_list)}
# and then call:
d = lists2dict(keys, vals)