在python中用另一个字典更新一个字典

时间:2014-03-04 10:25:19

标签: python dictionary

我正在尝试通过命令行发送字典键。 sys.argv[1]有钥匙。 此密钥存储在var2中并发送到append_func,这是另一个附加文件。 每当我为key提供命令行参数时,我都想动态地追加字典。但每当我输入新的命令行参数时,它都会被覆盖

请查看代码:

##filename : dictionary.py## 

import sys
import append
dic={}
var1=sys.argv[0]
var2=sys.argv[1]
dicto=append.append_fun(var2,dic)
dic=dic.update(dicto)
print dic

##filename : append.py##
def append_fun(var2,dic1):
    dic1[var2] = "hello"
    return dic1

在命令行中,我正在调用dictionary.py test。再次,当我打电话时,dictionary.py test1它不会为dic添加两个值,它将覆盖第二个值。

请帮我解释如何附加dic词典

3 个答案:

答案 0 :(得分:2)

您似乎想要persistence,以便您可以致电:

python dictionary.py test

然后再次执行:

python dictionary.py test1

虽然第一次运行的结果仍然存在。但是你没有从第一次运行中保存数据,并且由于每次初始化空字典时执行的行dic={},它当前不能像这样工作。

要获得此功能,您需要将状态保存在某个位置,例如临时文件或数据库中。您的代码必须在启动时重新加载先前的状态(当然,您还必须在退出之前转储当前状态)而不是行dic={}

我建议您查看pickle,以便将python对象简单而轻松地序列化到磁盘。

答案 1 :(得分:1)

在我们解决您的问题之前,您应该将此代码带到codereview.stackexchange.com。我发现很难理解为什么你喜欢

dicto=append.append_fun(var2,dic)

dicto[var2] = "hello"

如果我理解正确,你想要一本字典,当你分配给它时,将指定的值附加到可能已经存储在该键上的任何其他值上?如果是这样,你会爱上collections.defaultdict吗?我希望。虽然它不会那样做,但我认为它能够为你提供他们想要的东西。

创建defaultdict时,使用一个参数调用该类,该函数将在检索到缺失键时调用以创建新值。由于list()返回一个空列表,尝试检索任何键将导致创建该键并将其与通过调用默认对象函数(在对象实例化时作为参数提供的值)创建的值相关联。我希望以下交互式会话能够解释您需要了解的内容,但如果没有,请参阅我链接到的文档。

>>> import collections
>>> mydict = collections.defaultdict(list)
>>> mydict['newkey'].append("Surprise!") # empty list invisibly created
>>> mydict['newkey']
['Surprise!']
>>> mydict['newkey'].append("Surprise again!")
>>> mydict['newkey']
['Surprise!', 'Surprise again!']
>>> mydict['no such key']
[]
>>> list(mydict.keys())
['no such key', 'newkey']
>>>

这有帮助,还是我一直在咆哮错误的树?

答案 2 :(得分:0)

在python词典中是可变对象。因此,修改是“就地”完成的。所以你写了

dic.update(dicto)

因为update没有返回任何内容。以同样的方式:

def append_fun(var2,dic1):
    dic1[var2] = "hello"

append.append_fun(var2,dic)