繁体   English   中英

如何在替换ke的值的同时保留dict顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM