首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改字典中的某一项

如何更改字典中的某一项
EN

Stack Overflow用户
提问于 2012-09-18 20:36:01
回答 4查看 264关注 0票数 0

我需要一个函数来更改复合字典中的一个项。我试过像..。

代码语言:javascript
运行
复制
def SetItem(keys, value):

    item = self.dict

    for key in keys:          
        item = item[key]

    item = value

代码语言:javascript
运行
复制
 SetItem(['key1', 'key2'], 86)

它应该等价于 this . effect‘has 1’= 86,但是这个函数没有任何效果。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-18 20:39:41

差不多了。你实际上想做这样的事情:

代码语言:javascript
运行
复制
def set_keys(d, keys, value):
    item = d
    for key in keys[:-1]:
        item = item[key]
    item[keys[-1]] = value

或者像这样递归地:

代码语言:javascript
运行
复制
def set_key(d, keys, value):
    if len(keys) == 1:
        d[keys[0]] = value
    else:
        set_key(d[keys[0]], keys[1:], value)

不过马辛是对的。您可能真的希望合并一些更严格的内容,对缺少的键/缺失的dicts进行一些错误处理。

票数 3
EN

Stack Overflow用户

发布于 2012-09-18 20:42:12

代码语言:javascript
运行
复制
setItem = lambda self,names,value: map((lambda name: setattr(self,name,value)),names)
票数 2
EN

Stack Overflow用户

发布于 2012-09-18 20:43:06

  1. 你没有自我参数
  2. 只需使用您的工作代码行。
  3. 如果你坚持的话,有个办法: def setitem(self,key,value):减(dict.get,#= lambda字典,key: dictionarykey:-1,self.dictionary)[键-1]=值

显然,如果键列表中有一个非dict值,这将中断.你会想要处理的。事实上,由于这个原因,一个显式的循环可能会更好,但是你明白了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12484597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档