Python 3.7+如何按索引设置未知键的嵌套字典值
解决方案
核心逻辑:字典的修改必须通过「键索引」的方式作用到原字典对象上,直接对dict.values()/dict.keys()转成的临时列表做操作、或者给单独拎出来的值变量重新赋值,都不会改动原字典的内容。
你不需要提前知道任何键名,也不需要修改现有数据结构,按索引取到对应位置的键之后直接赋值即可,参考实现:
# 1. 取最外层字典的第一个值:类实例,用迭代器取值比转全量列表性能更好 outer_first_val = next(iter(outer_dict.values())) # 2. 拿到类实例上的字典属性,替换成你代码里实际的属性名即可 inner_dict = outer_first_val.dict_as_attribute # 3. 取内部字典的第一个键 inner_first_key = next(iter(inner_dict.keys())) # 4. 直接对原字典的键赋值,修改会直接同步到原嵌套结构 inner_dict[inner_first_key] = 1
原有写法不生效的原因
- 给单独赋值的变量
a重新绑定值:a = list(...)[0]只是让变量a初始指向字典里的第一个值,后续a = 1是改变量本身的指向,和原字典没有任何关联,自然不会同步修改。 - 给临时列表元素赋值:
list(dict.values())会生成一个独立的、和原字典无绑定的新列表,对这个临时列表的元素赋值只会作用在列表本身,列表执行完这行代码就会被回收,完全碰不到原字典的内容。
注:该方案完全依赖Python 3.7+官方保证的字典插入顺序保序特性,版本符合的场景下行为稳定,不需要提前获知任何字典键名,也不需要调整原有嵌套结构。
内容的提问来源于stack exchange,提问作者Kağan Aytekin
相关产品推荐
相关产品推荐

