2014-03-04 151 views
1

我想通过命令行发送字典密钥。 sys.argv[1]有关键。 此密钥存储在var2并发送到append_func这是另一个文件附加。 动态每当我给密钥的命令行参数,我想字典被附加。但其覆盖每次当过我进入新的命令行参数在Python中更新一个字典与另一个字典

请看代码:

##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字典

+4

您期待什么输出?每次我 –

+0

我运行dictionary.py文件,如下所示: dictionary.py测试 dictionary.py test1的 我想输出{你好测试:你好,TEST1}用不同的字符串运行dictionary.py。 例如:dictionary.py test1 dictionary.py test 输出结果应该是:{test1:hello,test:hello} – user3378508

回答

2

你似乎想persistence,这样您就可以拨打:

python dictionary.py test 

再后来再次执行:

python dictionary.py test1 

同时具有第一轮的结果仍然存在。但是第一次运行时无法保存数据,并且由于dic={}行每次初始化空字典时都会执行,因此目前无法像这样工作。

为了得到这个,你需要在某个地方保存状态,比如临时文件或数据库。代码dic={}不是,你的代码必须在启动时重新载入前一个状态(当然,你还必须在退出前转储当前状态)。

我建议看一下pickle,以获取简单和容易的将python对象序列化到磁盘。

+0

它没有重复键.. – user3378508

+0

哦,对,你希望它在python文件的不同执行时是持久的吗? – wim

+0

yes ..键将在运行时保持不变,并且值将相同。 因此我想字典得到更新 – user3378508

0

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

dic.update(dicto) 

因为update不返回任何东西。本着同样的精神:

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

append.append_fun(var2,dic) 
+0

append_fun(var2,dic1)返回键值。但是在dictionary.py中,当我执行dic = dic.update(dicto)时。它不会追加到已存在的键值对中,它只有一个从append_fun返回的键值对 – user3378508

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'] 
>>> 

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