【问题标题】:Update one dictionary with another in python在 python 中用另一个字典更新一个字典
【发布时间】:2014-03-04 19:20:50
【问题描述】:

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

请看代码:

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

【问题讨论】:

  • 你期待什么输出?
  • 我运行dictionary.py文件如下:dictionary.py test dictionary.py test1 我想得到输出{test : hello, test1 : hello}

标签: python dictionary


【解决方案1】:

你好像想要persistence,这样你就可以打电话了:

python dictionary.py test

然后稍后再次执行:

python dictionary.py test1

虽然保留了第一次运行的结果。但是你没有从第一次运行中保存数据,并且它目前不能像这样工作,因为每次初始化空字典时都会执行dic={} 行。

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

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

【讨论】:

  • 它没有重复的键.. 每次我用不同的字符串运行 dictionary.py 时。例如:dictionary.py test1 dictionary.py test 输出应该是:{test1 : hello, test : hello}
  • 哦,对了,您希望它在 python 文件的不同执行中保持不变?
  • yes.. 键将在运行时不断变化,值将相同。因此我希望字典得到更新
  • ok.. 在 dictionary.py 我写了 dicto=append.append_fun(var2,dic) dic=dic.update(dicto) 所以无论从 append.append_fun(var2,dic) 返回的键值对) 存储在 dicto 中。当我这样做时, dic=dic.update(dicto) 不应该不起作用吗?
  • 不,您仍然没有保存信息,因此当 python 解释器存在时状态将丢失。
【解决方案2】:

在我们回答您的问题之前,您真的应该将此代码带到 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']
>>>

这有帮助吗,还是我找错了树?

【讨论】:

    【解决方案3】:

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

    dic.update(dicto)
    

    因为update 不返回任何内容。同理:

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

    append.append_fun(var2,dic)
    

    【讨论】:

    • append_fun(var2,dic1) 返回键值。但是当我做 dic=dic.update(dicto) 时在 dictionary.py 中。它不会附加到 dic 中已经存在的键值对它只有一个从 append_fun 返回的键值对
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2019-05-08
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多