Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python和正则表达式替换字典中的键字符串?_Python_Regex - Fatal编程技术网

如何用Python和正则表达式替换字典中的键字符串?

如何用Python和正则表达式替换字典中的键字符串?,python,regex,Python,Regex,如何用Python替换使用正则表达式从中提取数据的键字符串,例如: {"root['toto']": {'new_value': 'abcdef', 'old_value': 'ghijk'}} 我想用更容易阅读的东西来替换root['toto'],比如toto,我的对象可能有几个这样的键,我想在root['']中提取,如果你的键都有类型“root[*]”,你可以使用: newkey = oldkey.replace("['"," ").replace("']","").split()[1]

如何用Python替换使用正则表达式从中提取数据的键字符串,例如:

{"root['toto']": {'new_value': 'abcdef', 'old_value': 'ghijk'}}

我想用更容易阅读的东西来替换
root['toto']
,比如
toto
,我的对象可能有几个这样的键,我想在
root['']

中提取,如果你的键都有类型“root[*]”,你可以使用:

newkey = oldkey.replace("['"," ").replace("']","").split()[1]

如果您的密钥都具有“root[*]”类型,则可以使用:

newkey = oldkey.replace("['"," ").replace("']","").split()[1]
其中d是字典对象

示例

d={"root['abc']":2,'3':4}
d={ k[6:-2] if k[:6]=="root['" else k :v for k,v in d.items() }
print(d)
输出

{'abc': 2, '3': 4}
{'abc': 2, '3': 4}
解释

d={"root['abc']":2,'3':4}                 #d is our old dict
nd={}                                     #nd is new dict
for k,v in d.items():                     #iterating over each key,value k,v
  nk= k[6:-2] if k[:6]=="root['" else k   #nk is our new key
  nd[nk]=v                                #setting nk:v in nd
print(nd)                                 #print final dict
我们使用字典理解来创建新的字典

打破界限:-

{                                    #Start dictionary construction 
k[6:-2] if k[:6]=="root['" else k    # this is our new key
:                                    # key value separator
v                                    #Keep the same value as the old one.
for k,v in d.items()                 #Do this for all key,values in my old dictionary.
}                                    #End dictionary construction

不使用听写理解

d={"root['abc']":2,'3':4}                 #d is our old dict
nd={}                                     #nd is new dict
for k,v in d.items():                     #iterating over each key,value k,v
  nk= k[6:-2] if k[:6]=="root['" else k   #nk is our new key
  nd[nk]=v                                #setting nk:v in nd
print(nd)                                 #print final dict
输出

{'abc': 2, '3': 4}
{'abc': 2, '3': 4}
其中d是字典对象

示例

d={"root['abc']":2,'3':4}
d={ k[6:-2] if k[:6]=="root['" else k :v for k,v in d.items() }
print(d)
输出

{'abc': 2, '3': 4}
{'abc': 2, '3': 4}
解释

d={"root['abc']":2,'3':4}                 #d is our old dict
nd={}                                     #nd is new dict
for k,v in d.items():                     #iterating over each key,value k,v
  nk= k[6:-2] if k[:6]=="root['" else k   #nk is our new key
  nd[nk]=v                                #setting nk:v in nd
print(nd)                                 #print final dict
我们使用字典理解来创建新的字典

打破界限:-

{                                    #Start dictionary construction 
k[6:-2] if k[:6]=="root['" else k    # this is our new key
:                                    # key value separator
v                                    #Keep the same value as the old one.
for k,v in d.items()                 #Do this for all key,values in my old dictionary.
}                                    #End dictionary construction

不使用听写理解

d={"root['abc']":2,'3':4}                 #d is our old dict
nd={}                                     #nd is new dict
for k,v in d.items():                     #iterating over each key,value k,v
  nk= k[6:-2] if k[:6]=="root['" else k   #nk is our new key
  nd[nk]=v                                #setting nk:v in nd
print(nd)                                 #print final dict
输出

{'abc': 2, '3': 4}
{'abc': 2, '3': 4}

可以使用以下正则表达式:

mydict = {
    "root['toto']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "test['aaa']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "root['bb']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "ccc": {'new_value': 'abcdef', 'old_value': 'ghijk'}
    }

for key, value in mydict.items():
    new_key = re.sub(r"(\w+\[')(\w+)('\])", r"\2", key)

    if new_key != key:
        mydict[new_key] = mydict.pop(key)  # Remove the old entry and add the entry back with new key

print mydict    
为您提供更新的
mydict
,其中包含:

{'aaa': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'bb': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'toto': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'ccc': {'new_value': 'abcdef', 'old_value': 'ghijk'}}    

可以使用以下正则表达式:

mydict = {
    "root['toto']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "test['aaa']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "root['bb']": {'new_value': 'abcdef', 'old_value': 'ghijk'},
    "ccc": {'new_value': 'abcdef', 'old_value': 'ghijk'}
    }

for key, value in mydict.items():
    new_key = re.sub(r"(\w+\[')(\w+)('\])", r"\2", key)

    if new_key != key:
        mydict[new_key] = mydict.pop(key)  # Remove the old entry and add the entry back with new key

print mydict    
为您提供更新的
mydict
,其中包含:

{'aaa': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'bb': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'toto': {'new_value': 'abcdef', 'old_value': 'ghijk'}, 
'ccc': {'new_value': 'abcdef', 'old_value': 'ghijk'}}    

这不是JSON,而是一本字典。我正在删除tag.copy到一个新的dict
{k[6:-2]如果k[:6]==“root['”否则k:v代表k,v在d.items()中
其中
d
是您的旧dictionary@bulbus读起来有点复杂,但应该作为一个答案来解释。这不是JSON,这是一个字典。我正在删除标记。复制到一个新的dict
{k[6:-2]如果k[:6]==“root['”else k:v代表k,v代表d.items()}
其中
d
是您的旧dictionary@bulbus阅读起来有点复杂,但应该作为解释的答案发布。或者干脆
oldkey.replace(“root[”,“”)。replace(“”),“”)
@Phướ碳氢化合物ữu Lưu工作非常好,简单,高效,我喜欢这种注释;@Rawing还需要
替换(“']”,“”)
或者只
oldkey.replace(“根[”,“”)。替换(“']”,“”)
@Phướ碳氢化合物ữu Lưu工作很好,简单,高效,我喜欢这种注释;@Rawing还需要
替换(“]”,“”)
这正是我要找的解决方案;)这正是我要找的解决方案;)