[英]How to preserve the dict order while replacing the value of ke
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 并遍历 dict 中的键和值,但将顺序保留为下面的原始顺序。
j = {'e.ticket.instructions': 'text', 'AGroup.re': 'text, loop', 'create.pr.cr': 'boolean, loop'}
此外,如果 env == "pr",它应该忽略 'e.ticket.instructions' 键,所以 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'}
如何在替换键中的单词时保留顺序。
您正在做的事情显然是基于一些奇怪的代码,当您尝试使用它做更多事情时,这些代码变得越来越奇怪。 您应该从描述您实际尝试实现的目标开始您的问题,这有两个方面的帮助:人们可能会更好地帮助您,您自己可能会对手头的任务有所了解。
如果您似乎可能尝试根据env
值到模板字典j
中的可能替换来进行键组合,您可以通过以下方式以易于理解的方式实现此目的:
Envs = ["re","pr","qa"]
j_template = {'e.ticket.instructions': 'text', 'AGroup.ENV': 'text, loop','create.ENV.cro': 'boolean, loop'}
j_new = dict() # make a new dictionary for substituted keys
for env in Envs:
for ky, val in j_template.items():
# add updated item to interpreted dictionary
j_new[ky.replace('ENV', env)] = val
如果测试/打印很重要,您可以相应地更新。 j_new 的最终值为:
{'e.ticket.instructions': 'text', 'AGroup.re': 'text, loop', 'create.re.cro': 'boolean, loop', 'AGroup.pr': 'text, loop', 'create.pr.cro': 'boolean, loop', 'AGroup.qa': 'text, loop', 'create.qa.cro': 'boolean, loop'}
请注意,尽管我们指定j_new['e.ticket.instructions']
3 次(因为文本替换什么都不做),但解释后的字典将只有一个条目。
正如评论中所观察到的,顺序通常不是字典数据结构使用的主要内容。 如果排序真的很重要(或有用),其他一些结构(例如元组列表)可能更合适。 仅从 Python 3.7 开始保证字典中的项目顺序为插入顺序,但您使用的是 Python 2.x(移至 Python 3.x 是个好主意)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.