当前位置: 首页 > 知识库问答 >
问题:

如何向嵌套DICT动态添加值?

石正奇
2023-03-14

我想给嵌套的dict中的一个特定键添加一个值,我不知道如何才能做到这一点。 所以我有一个:

thedict = {'one': {'two': {'three': {'four': None}}}}

并且我想在four中添加一个值,或者在one中添加另一个键/值对:

thedict['one']['two']['three']['four'] = thevalue
thedict['one']['new'] = 'something else'

那是有可能的。 但是我怎样才能让这个更有活力呢? 例如,我在这个上下文中有一个列表:

thedict = {'one': {'two': {'three': {'four': None}}}}
thelist = ['one', 'two', 'three', 'four']
thevalue = 'something'

然后如何将thevalue分配给foure? 当然,thedicttheList是动态创建的,我不能只做:

thedict[thelist[0]][thelist[1]][thelist[2]][thelist[3]] = thevalue

共有3个答案

罗梓
2023-03-14

下面是一种递归的方法:

import pprint

thedict = {'one': {'two': {'three': {'four': None}}}}
thelist = ['one', 'two', 'three', 'four']
thevalue = 'something'

def assign_by_path(d, l, v):
    if len(l) == 1:
        d[l[0]] = v
    else:
        assign_by_path(d[l[0]], l[1:], v)

pprint.pprint(thedict) 
==> {'one': {'two': {'three': {'four': None}}}}


assign_by_path(thedict, thelist, thevalue)
pprint.pprint(thedict)

==> {'one': {'two': {'three': {'four': 'something'}}}}
叶声
2023-03-14

你能做的

thedict = {'one': {'two': {'three': {'four': None}}}}
thelist = ['one', 'two', 'three', 'four']
thevalue = 'something'

curr = thedict
for idx, k in enumerate(thelist):
    if idx == len(thelist) - 1:
        curr[k] = thevalue
    else:
        curr = curr[k]
print(thedict)
鄂慈
2023-03-14

您可以循环遍历这些键,直到到达最里面的dict,然后设置值:

# Loop until inner dict
subdict = thedict
for key in thelist[:-1]:
    subdict = subdict.get(key)

# Set value
subdict[thelist[-1]] = thevalue
 类似资料:
  • 我有以下java代码: 我的问题如下:我收到一个文本和一种语言,我必须检查该文本是否仅使用该语言的有效字母字符书写。我的代码如下: 这很好,也很有效,但随着我在应用程序中添加语言,我将不得不在交换机中添加越来越多的案例。 我想知道在中是否有一种方法可以动态命名一个静态嵌套类,比如: 所以我上面的代码可能是这样的: 谢谢,如果这是超级简单的事情,我很抱歉。 我是一名开发人员,正在学习。

  • 问题内容: 我只是从数组,对象和JSON开始-希望这里有一些简单的事情我可以忽略。尝试 将 新项目 添加(推入) 我的json对象时遇到错误。 我遇到以下错误:( 接近我的代码段的底部) 。 问题答案: 是一个对象,而不是数组。您将事物推入阵列。与PHP不同,Javascript具有区别。 您的代码尝试创建一个类似于键值对源代码的字符串,然后将其“推”到对象上。这甚至与它的工作方式并不接近。 您要

  • 问题内容: 我有一个空的JTable,绝对没有。我需要以某种方式动态生成其表列。我尝试使用的代码的简化版本: 但是我得到了 线程“ AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:0> = 0 我究竟做错了什么? 如果有帮助,这是完整的堆栈跟踪: 问题答案: 我认为您需要将列添加到表的数据模型及其列模型中。当数据模型更改时

  • 问题内容: 目标是创建一个行为类似db结果集的模拟类。 因此,例如,如果数据库查询使用表达式返回,那么我想看看: 刚开始我以为我可以这样做: 但返回一个属性对象。 用替换该行根本没有用。 那么在运行时创建实例属性的正确方法是什么? 问题答案: 我想我应该扩大这个答案,因为我年纪大一些并且比较聪明,并且知道发生了什么事。迟到总比不到好。 你可以动态地向类添加属性。但这很重要:你必须将其添加到类中。

  • 问题内容: 如何“动态”向对象添加新方法? 问题答案: 您可以利用这一点:

  • 我对JavaFX相对较新,我很困惑为什么我下面的代码没有产生预期的结果,即添加到网格中的标签。 我想做的是运行一个测试,将JavaFX标签添加到我的FXML GridPane,因为我想在不久的将来构建一个方法,允许用户选择一个文件,然后在用户选择文件时生成一个标签并将该标签添加到GridPane。 提前感谢, 代码: FXML代码是一个标准文件,其中定义了一个网格窗格,上面列出了fx:id。

  • 假设我有一个空的dataframe,已经设置了列,但没有行。我从网上搜集了一些数据,所以假设我需要向空数据帧添加一个索引< code>'2176'。当我试图分配该行时,如何自动将它添加到数据库中?这是熊猫的目的还是我应该用别的东西?

  • 问题内容: 如果我有一个定义如下的函数: 有没有一种方法可以动态地将此函数添加为芹菜PeriodicTask并在运行时启动它?我希望能够做类似(伪代码)的事情: 我还想用(pseudocode)之类的东西动态地停止或删除该任务: 要么 仅供参考,我不使用djcelery,它使您可以通过django管理员管理定期任务。 问题答案: 不,对不起,常规的芹菜拍不可行。 但是做您想要的事情很容易扩展,例如