Python:使用变量进行字典更新会添加新密钥,但会将旧值替换为新值

时间:2017-03-24 21:29:54

标签: python python-3.x dictionary

我正在尝试将信息存储在我想要稍后访问的字典中。我使用变量动态地执行它,其中“badgeID”是我用作键的全局计数器,值是我从用户获得的数组/列表。

Here is the screen shot

当我尝试向字典添加多个K:V时,它会添加一个键,但会替换所有以前存储的值(在这种情况下,它是一个数组/列表)和最新的值。任何帮助将非常感激。谢谢

2 个答案:

答案 0 :(得分:1)

  

当我尝试添加多个K:V时的问题   字典,它添加一个键,但替换以前存储的所有   值(在这种情况下,它是一个数组/列表)与最新的。

解决此问题的技巧是每个键 badgeNum 都会新闻一个值列表而不是单个值。

>>> mydict = {}
>>> mydict.setdefault(1234, []).append('first 1234')
>>> mydict.setdefault(5678, []).append('first 5678')
>>> mydict.setdefault(1234, []).append('second 1234')
>>> mydict.setdefault(5678, []).append('second 5678')
>>> mydict
{1234: ['first 1234', 'second 1234'], 5678: ['first 5678', 'second 5678']}

另一种方法是使用collections.defaultdict(),这需要花费更多的精力进行设置,但是可以更简单(并且更快)添加新值:

>>> from collections import defaultdict
>>> mydict = defaultdict(list)
>>> mydict[1234].append('first 1234')
>>> mydict[5678].append('first 5678')
>>> mydict[1234].append('second 1234')
>>> mydict[5678].append('second 5678')
>>> mydict
defaultdict(<class 'list'>, {1234: ['first 1234', 'second 1234'], 5678: ['first 5678', 'second 5678']})

答案 1 :(得分:0)

解决。这是一个愚蠢的错误。我试图填充全局数组,然后每当我通过使用&#34; del myarray [:]&#34;收到用户的输入时清除数组。我声明了数组只是为了函数,它的工作原理。