gpt4 book ai didi

python - 尝试通过添加更多键 :value pairs 来增加嵌套字典

转载 作者:太空狗 更新时间:2023-10-30 00:55:36 25 4
gpt4 key购买 nike

我在尝试向本身嵌套在另一个字典对象中的字典对象中添加更多键:值对时遇到了一些麻烦。此外,通常使用 dict[key] = value 将额外的键值对分配给字典的方法不适合我这里的情况(我将在下面解释原因),因此这让我的目标更难实现。

我将通过我的源代码中的一些语句来说明我试图实现的目标。

首先,我有一个包含嵌套的字典对象:

environment = { 'v' : 
{
'SDC_PERIOD':'{period}s'.format(period = self.period),
'FAMILY':'{legup_family}s'.format(legup_family = self.legup_family),
'DEVICE_FAMILY':'"{fpga_family}s"'.format(fpga_family = self.fpga_family)
}
}

然后在这一行之后,我将做一个 if 测试,如果通过,将要求我添加另一个字典:

environment_add = { 'v' : {'LM_LICENSE_FILE' : '1800@adsc-linux'} , 
'l' : 'quartus_full' }

最终形成这个完整的字典:

environment = { 'v' : 
{
'SDC_PERIOD':'{period}s'.format(period = self.period),
'FAMILY':'{legup_family}s'.format(legup_family = self.legup_family),
'DEVICE_FAMILY':'"{fpga_family}s"'.format(fpga_family = self.fpga_family),
'LM_LICENSE_FILE' : '1800@adsc-linux'
} ,
'l' : 'quartus_full'
}

如您所见,如果我尝试使用 dict[key] = value 语法分配一个新的键值对,它对我不起作用,因为它最终要么为我创建一个新的键值对,或者覆盖现有的字典对象和嵌套在 'v' 键下的键值对。

到目前为止,为了完成字典的创建,我一直在使用以下内容:

environment = """{ v: {'SDC_PERIOD':'%(period)s','FAMILY':'%(legup_family)s','DEVICE_FAMILY':'"%(fpga_family)s"'}}""" % self
if self.require_license: # this is the if statement test that I was referring to earlier
environment = environment.replace('}', '')
environment += """ ,'LM_LICENSE_FILE':'1800@adsc-linux'}, 'l': 'quartus_full'}"""

然后通过以下方式获取字典对象:

import ast
env_dict = ast.literal_eval(environment)

它有效地将 environment 字符串转换为存储在新变量名 env_dict 下的字典对象。

我的队友认为这太过分了,特别是因为 environmentenv_dict 对象稍后将在 2 个单独的模块中解析。在第一个模块中,键值对将被分解和重构以形成类似于 '-v SDC_PERIOD=2500s, LM_LICENSE_FILE=1800@adsc-linux' 的字符串,而在第二个模块中,嵌套在 'v' 键(environment/env_dict 字典对象)下的字典将被提取出来并直接作为参数提供给接受映射对象的函数。

因此如您所见,完成这项工作需要相当多的精确解析,虽然我的方法达到了目标,但我的团队并没有接受它,他们认为必须有更好的方法来做这直接来自 environment 是一个字典对象而不是一个字符串对象。

非常感谢您阅读我的详细帖子,我将非常感谢任何帮助或建议,以插入这方面的进展!

最佳答案

for k,v in environment_add.iteritems(): # .items() in Python 3
if k in environment:
environment[k].update(v)
else:
environment[k] = v

也就是说,对于每个要添加的项目,检查它是否存在,如果存在则更新它,或者简单地创建它。这假定要添加的项目(如果存在)将是字典(您不能更新像 quartus_full 这样的字符串)。

关于python - 尝试通过添加更多键 :value pairs 来增加嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com