如何替换保持顺序的字典键


Envs = ["re","pr","qa"]
j = {'e.ticket.instructions': 'text', 'AGroup.ENV': 'text, loop','create.ENV.cro': 'boolean, loop'}
for env in Envs:
j = {key.replace('ENV', env): j.pop(key) for key in j.keys()}
for i in j:
if "boolean" in j[i]:
if env == "pr" and i == 'e.ticket.instructions':
print "ignore"
else:
print "proceed"

print(k)
else
print "not boolean"
j = {key.replace(env, 'ENV'): j.pop(key) for key in j.keys()}

期望输出:我应该能够替换env并遍历字典中的键和值,但保留下面的原始顺序。

j = {'e.ticket.instructions': 'text', 'AGroup.re': 'text, loop', 'create.pr.cr': 'boolean, loop'}

如果env == "p ",它应该忽略' .ticket '。指令键,所以j应该像下面这样:

j = {'e.ticket.instructions': 'text', 'AGroup.pr': 'text, loop', 'create.pr.cr': 'boolean, loop'}

但它不保留顺序并将其更改为以下:

j = {'create.pr.cr': 'boolean, loop', 'AGroup.pr': 'text, loop', 'e.ticket.instructions': 'text'}

如何在替换key中的单词时保持顺序。

好吧,直到Python 3.6(参见PEP 468)字典才有保证顺序,所以如果你想要这样,你需要使用collections.OrderedDict。这似乎是一个非常复杂的方法,有弹出键之类的。你可以试试这个,但我不知道你想用boolean/ticket.instructions跳变来做什么。for i in j只检查键,其中不包含"布尔"。没有键或值可以匹配"ticket.instructions"而且,据我所知,你甚至不会改变字典中包含的内容。它只是做一些打印。

无论如何,我希望这能帮助你,或者至少让你开始。

from collections import OrderedDict
envs = ["re", "pr", "qa"]
j = {
"e.ticket.instructions": "text",
"AGroup.ENV": "text, loop",
"create.ENV.cro": "boolean, loop",
}
env_j = {
env: {k.replace("ENV", env): v for k, v in OrderedDict(j).items()} for env in envs
}
print(env_j)

输出如下所示的字典:

{
"re": {
"e.ticket.instructions": "text",
"AGroup.re": "text, loop",
"create.re.cro": "boolean, loop",
},
"pr": {
"e.ticket.instructions": "text",
"AGroup.pr": "text, loop",
"create.pr.cro": "boolean, loop",
},
"qa": {
"e.ticket.instructions": "text",
"AGroup.qa": "text, loop",
"create.qa.cro": "boolean, loop",
},
}

最新更新