我正在尝试通过命令行发送字典键。 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
词典
答案 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)