簡體   English   中英

用Python方式替換字典鍵和/或值

[英]Pythonic Way To Replace Dict Keys and/or Values

我正在尋找一種“有效”的方式來遍歷字典,並替換以“ var”開頭的任何鍵或值。

例如,如果我有這個:

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'}

由於您將其像文本模板語言一樣對待(如果可以,為什么不使它成為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)

這是一個非常手動的算法,但是這里有:

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

這可以工作,但是如果您不能保證唯一性 ,那就有點麻煩了,尤其是在需要更換鑰匙的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM