gpt4 book ai didi

python - 从包含键的列表创建字典的键

转载 作者:行者123 更新时间:2023-12-01 05:48:55 24 4
gpt4 key购买 nike

我正在尝试构建一个包含多个级别的多个值的矩阵。我正在尝试生成这样的字典:

{'routername':{'channel':{'01':<value>,'02':<value>}}}

最高级别的按键数量可能会有所不同。

该脚本正在生成可用路由器的列表和另一个可用 channel 的列表。我编写了一个相当麻烦的函数来测试某个键,如果它不存在,它将将该键添加到字典中。

所以,我想知道是否有一种简单的方法可以为列表“路由器”中的键创建一个包含空值的字典

def AddToChart(passed_seq):
try:
if str(passed_seq[0]) in chart_dict:
if str(passed_seq[1]) in chart_dict[passed_seq[0]]:
if str(passed_seq[2]) in chart_dict[passed_seq[0]][passed_seq[1]]:
if str(passed_seq[3]) in chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]]:
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]][passed_seq[3]].update(err_sub_dict)

else:
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]].update({passed_seq[3]:{}})
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]][passed_seq[3]].update(err_sub_dict)
else:
chart_dict[passed_seq[0]][passed_seq[1]].update({passed_seq[2]:{passed_seq[3]:{}}})
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]][passed_seq[3]].update(err_sub_dict)
else:
chart_dict[passed_seq[0]].update({passed_seq[1]:{passed_seq[2]:{passed_seq[3]:{}}}})
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]][passed_seq[3]].update(err_sub_dict)
else:
chart_dict.update({passed_seq[0]:{passed_seq[1]:{passed_seq[2]:{passed_seq[3]:{}}}}})
chart_dict[passed_seq[0]][passed_seq[1]][passed_seq[2]][passed_seq[3]].update(err_sub_dict)
except ValueError:
print "AddToChart: ",err_sub_dict,sys.exc_info()[1][0]
except:
print sys.exc_info()
print "AddToChart: variable not defined: " + str(passed_seq)

最佳答案

我建议使用嵌套 collections.defaultdict对于 chart_dict 。它允许您提供工厂函数来设置新值,因此您请求的任何 key 都将始终有效。设置如此深层的嵌套结构有点棘手,但我认为以下内容将为您的四层结构做正确的事情(我假设您的 <value> 项也是字典,因为看起来您当前的代码期望):

chart_dict = defaultdict(lambda:defaultdict(lambda:defaultdict(dict)))

完成后,您应该能够执行以下操作,而不必担心任何键之前是否引用了字典中的任何内容:

a, b, c = passed_seq
chart_dict[a][b][c].update(err_sub_dict)

我建议也做一些类似上面变量解包的事情,尽管你可能应该使用比 a 更好的名称。 , b ,和c 。好的变量名可以把难以理解的东西变成容易掌握的东西。

关于python - 从包含键的列表创建字典的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089673/

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