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

在python中用一个字典更新另一个字典,python,dictionary,Python,Dictionary,我正试图通过命令行发送字典密钥sys.argv[1]具有该键。 此键存储在var2中,并发送到append\u func,这是另一个文件append。 动态地,每当我为key提供命令行参数时,我都希望添加dictionary。但每次我输入新的命令行参数时,它都会被覆盖 请看代码: ##filename : dictionary.py## import sys import append dic={} var1=sys.argv[0] var2=sys.argv[1] dicto=append

我正试图通过命令行发送字典密钥
sys.argv[1]
具有该键。 此键存储在
var2
中,并发送到
append\u func
,这是另一个文件append。 动态地,每当我为key提供命令行参数时,我都希望添加dictionary。但每次我输入新的命令行参数时,它都会被覆盖

请看代码:

##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
字典,以便您可以调用:

python dictionary.py test
然后,稍后再次执行:

python dictionary.py test1
同时保留第一次运行的结果。但是没有地方可以保存第一次运行时的数据,并且它当前不能像这样工作,因为每次初始化空dict时都会执行行
dic={}

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


我建议看一看python对象到磁盘的简单易用的序列化

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

dic.update(dicto)
因为
update
不会返回任何内容。同样地:

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


在我们开始讨论您的问题之前,您应该将此代码带到codereview.stackexchange.com。我觉得很难理解你为什么喜欢我

dicto=append.append_fun(var2,dic)

如果我理解正确,您是否想要一本字典,当您分配给它时,它会将分配的值附加到可能已针对该键存储的任何其他值?如果是的话,你会去爱吗。我希望如此。虽然它不能做到这一点,但我认为它能够为你提供他们想要的东西

当您创建一个
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']
>>>

这有帮助吗,或者我查错了树了吗?

您希望得到什么输出?我运行dictionary.py文件如下:dictionary.py test dictionary.py test1我想得到输出{test:hello,test1:hello}它没有重复的键。。每次我用不同的字符串运行dictionary.py时。对于ex:dictionary.py test1 dictionary.py,测试输出应该是:{test1:hello,test:hello}哦,对了,您希望它在python文件的不同执行过程中保持不变吗?是的。。键将在运行时不断更改,值将相同。因此,我希望字典得到更新。。在dictionary.py中,我编写了dicto=append.append\u-fun(var2,dic)dic=dic.update(dicto),所以从append.append\u-fun(var2,dic)返回的任何键值对都存储在dicto中。当我这样做时,dic=dic.update(dicto)不应该不起作用吗?不,您仍然没有保存信息,因此当python解释器存在时状态将丢失。append_fun(var2,dic1)返回键值。但在dictionary.py中,当我执行dic=dic.update(dicto)时。它不附加到dic中已经存在的键值对,它只有从append\u返回的一个键值对
dicto[var2] = "hello"
>>> 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']
>>>