用Pythonic方法替换Dict键和/或值
我正在寻找一种“高效”的方法来迭代字典,并替换任何以“var”开头的键或值 例如,如果我有:用Pythonic方法替换Dict键和/或值,python,dictionary,substitution,Python,Dictionary,Substitution,我正在寻找一种“高效”的方法来迭代字典,并替换任何以“var”开头的键或值 例如,如果我有: data = { "user_id": "{{var_user_id}}", "name": "bob", "{{var_key_name}}": 4 } 我有一个变量值的目录: variables = { "user_id": 10, "key_name": "orders_count" } 然后我希望我的最终数据记录如下所示: data = { "
data = {
"user_id": "{{var_user_id}}",
"name": "bob",
"{{var_key_name}}": 4
}
我有一个变量值的目录:
variables = {
"user_id": 10,
"key_name": "orders_count"
}
然后我希望我的最终数据记录如下所示:
data = {
"user_id": 10,
"name": "bob",
"orders_count": 4
}
直截了当地说:
result = {}
for k,v in data.items():
if '{{var_' in k: # if `{{var..}}` placeholder is in key
result[variables[k[6:-2]]] = v
elif '{{var_' in v: # if `{{var..}}` placeholder is in value
result[k] = variables[v[6:-2]]
else:
result[k] = v
print(result)
输出:
{'user_id': 10, 'orders_count': 4, 'name': 'bob'}
这是一个相当手动的算法,但这里有:
for key, value in data.iteritems():
if "var" in str(key):
#iterate through "variables" to find the match
elif "var" in str(value):
#iterate through "variables" to find the match
#populate "data" with the key value pair
这会起作用,但如果你不能保证唯一性,那就有点麻烦了,特别是在需要替换键的情况下。既然你把它当作文本模板语言(如果是,为什么不让它与string.format(**variable)语法兼容?)使用文本替换:
import ast
import re
text = re.sub('{{var_(.*?)}}', lambda m: variables[m.groups()[0]], str(data))
data2 = ast.literal_eval(text)
print(data2)
没有特别有效的方法,您必须遍历所有键和值。到目前为止,您尝试了什么?我不明白
数据
和变量
之间的共同联系是什么。如果dicts中有多个条目,则似乎没有任何标识符来匹配。想必你真正的口述不是这样的,因为这里真的没有什么可重复的。这非常有效,正是我想要的。我只需要稍微修改一下:text=re.sub({{var{(.*?}}}),lambda m:str(variables[m.groups()[0]]),str(data))
(将lambda包装在str()中)