【问题标题】:Using a dictionary's update function使用字典的更新功能
【发布时间】:2017-12-03 07:19:44
【问题描述】:

我对字典的内置更新功能有疑问

mydict = {1: {45:'ades'}, 2: {68:'gdes'}}
addthis = {1: {44:'paes'}}
changethis = {1: {45 : 'qwes'}
mydict.update(new)
mydict.update(changethis)
>>>mydict
{1: {45: 'qwes'}, {44: 'paes}, 2:{68: 'gdes'}}

我很熟悉 update 替换任何键以及附加到它的值(如果它已经存在)的事实。但是,我想知道如何在不删除原始密钥 1 的情况下附加 addthis,然后用 changethis 更新替换原始密钥 1。任何帮助将不胜感激!

【问题讨论】:

  • 在python字典中键必须是唯一的!!
  • 您希望对于键 1,您将访问 2 个不同的值?或者您将使用 1 访问不同的字典?
  • 嗨@Green,我希望键 1 可以访问两个不同的值,它们是字典
  • @Ahmad 真的吗?所以这是不可能的?
  • 您希望结果为:{1: {44: 'paes', 45: 'qwes'}, 2: {68: 'gdes'}}?因为您问题中的预期结果无效。

标签: python class dictionary


【解决方案1】:

如果我对您的理解正确,那么您需要一个具有键 "1" 值的字典,这也是字典:

test_dict = {1: {45:"t"}, 2:{44:"tt"}}
new_value = {1: {44: "pae"}}
update_value = {1:{44:"tt"} }


def add_to_dict(dict, new_value):
   for key, value in new_value.items():
       dict[key].update(value)
# print(new_value.keys())

def update_dict(dict,new_value):
    dict.update(new_value)


if _name_ == '_main_':

   add_to_dict(test_dict,new_value)
   print(test_dict)
   update_dict(test_dict,update_value)
   print(test_dict)

它会打印出来:

# after you add a value to the dictionary inside the dictionary
{1: {44: 'pae', 45: 't'}, 2: {44: 'tt'}}
# after you update the value
{1: {44: 'tt'}, 2: {44: 'tt'}}

【讨论】:

  • 哦!这几乎就是我要找的!但是,如果您在更新字典后不能以某种方式删除 {1: {45: 't'}},那就完美了!
  • 所以只使用第一个函数?听起来这就是您想要实现的目标:{1: {44: 'pae', 45: 't'}, 2: {44: 'tt'}}
【解决方案2】:

从你想要一个列表的 cmets 中出现。为此,地图的每个值都需要是一个列表,而不是单个字典。

mydict = {1: [{45:'ades'}], 2: [{68:'gdes'}]}

然后,当你向mydict添加东西时,你需要索引到字典中并更新:

addthis = {44:'paes'}
mydict[1].append(addthis)

>>>mydict
{1: [{45: 'ades'}, {44: 'paes'}], 2: [{68: 'gdes'}]}

要更改mydict 中的内容,您需要遍历列表中的项目并进行相应更新:

for el in mydict[1]:
    if 45 in el.keys():
        el[45] = 'qwes'
        break

这将导致:

>>>mydict
{1: [{45: 'qwes'}, {44: 'paes'}], 2: [{68: 'gdes'}]}


经过进一步澄清,您似乎想要一本字典:

mydict = {1: {45: 'ades'}, 2: {68: 'gdes'}}

要将元素添加到字典中的1

mydict[1][44] = 'paes'
>>>mydict
{1: [{44: 'paes', 45: 'ades'}], 2: [{68: 'gdes'}]}

您可以使用以下方式访问44 的值:

mydict[1][44]

修改45处的值:

mydict[1][45] = 'qwes'
>>>mydict
{1: {44: 'paes', 45: 'qwes'}, 2: {68: 'gdes'}}

【讨论】:

  • 嗯...谢谢你的帮助。有没有办法以某种方式将列表中的元素链接到一个值?这是因为如果我需要将一堆元素附加到我的键 1 的值列表中,我怎么知道哪个元素是我需要的?例如,如果我需要将 100 个项目附加到列表中,我需要一种简单的方法来说出“45”,然后它会提取键 45 的值。
  • 您的另一种选择是拥有一个字典字典(而不是字典列表字典)。这看起来像 {1: {45: 'qwes', 44: 'paes'}, 2: {68: 'gdes'}},访问方式如下:mydict[1][45] == 'qwes'mydict[1][44] == 'paes'
  • 是的!这就是我需要的!但是,我不知道如何将键的值和值的值附加到字典中,而不会删除我必须开始的任何内容并替换它。
  • 你为什么在没有括号的情况下启动 mydict 然后不知何故包含括号并以某种方式再次删除它们?
  • 此上下文中的括号用于索引(访问)字典中的值。它们不代表列表。当我执行mydict[1][45] 之类的操作时,我正在索引mydict 的条目1,然后索引该子词典的45 条目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 2019-07-31
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
相关资源
最近更新 更多