Python 如何重置字典中的所有值

Python 如何重置字典中的所有值,python,dictionary,Python,Dictionary,这是定义为“completeddict”的词典。 我想做的是,将所有值更改为0,不管它们调用什么。 但是请记住,新帐户名将在任何时候添加为“密钥”,因此我无法手动执行“completeddict[green]=0”、“completeddict[lewis]=0”等操作 有没有办法让python将字典中的所有值更改回0 编辑:不幸的是,我不想创建一个新的字典-我想保留一个名为“completeddict”的字典,因为程序需要在程序的许多点上使用定义为“completeddict”的字典。当然,这

这是定义为“completeddict”的词典。 我想做的是,将所有值更改为0,不管它们调用什么。 但是请记住,新帐户名将在任何时候添加为“密钥”,因此我无法手动执行“completeddict[green]=0”、“completeddict[lewis]=0”等操作

有没有办法让python将字典中的所有值更改回0

编辑:不幸的是,我不想创建一个新的字典-我想保留一个名为“completeddict”的字典,因为程序需要在程序的许多点上使用定义为“completeddict”的字典。

当然,这很简单:

{"green": 0, "y3": 1, "m@tt": 0, "newaccount": 0, "egg": 0, "results": 0, "dan": 0, "Lewis": 0, "NewAccount2": 0, "testyear3": 1, "testyear6": 0, "NewAccount1": 0, "testyear4": 0, "testyear5": 0, "Matt1": 0, "swag": 1, "lewis": 1, "matt": 1, "notin": 0}
这是词典理解,相当于:

newDict = {key: 0 for key in completeddict}
这些dict理解是在v2.7中引入的,因此较旧的vesions将需要使用扩展形式

另一种选择是使用:

fromkeys(seq[,value])

使用seq中的键和设置为value的值创建一个新字典

演示:


实际上,在任何Python版本中都可以使用的表单就是使用
dict
构造函数和列表理解或生成器:

>>> d = {"green": 0, "y3": 1, "m@tt": 0, "newaccount": 0, "egg": 0, "results": 0, "dan": 0, "Lewis": 0, "NewAccount2": 0, "testyear3": 1, "testyear6": 0, "NewAccount1": 0, "testyear4": 0, "testyear5": 0, "Matt1": 0, "swag": 1, "lewis": 1, "matt": 1, "notin": 0}
>>> d.fromkeys(d, 0)
{'newaccount': 0, 'swag': 0, 'notin': 0, 'NewAccount1': 0, 'Matt1': 0, 'testyear4': 0, 'Lewis': 0, 'dan': 0, 'matt': 0, 'results': 0, 'm@tt': 0, 'green': 0, 'testyear5': 0, 'lewis': 0, 'NewAccount2': 0, 'y3': 0, 'testyear3': 0, 'egg': 0, 'testyear6': 0}
然后可以将其与可变参数或某种形式的可调用参数一起使用:

>>> d={"green": 10, "y3": 11, "m@tt": 12, "newaccount": 22, "egg": 55, "results": 0, "dan": 0, "Lewis": 0, "NewAccount2": 0, "testyear3": 1, "testyear6": 0, "NewAccount1": 0, "testyear4": 0, "testyear5": 0, "Matt1": 0, "swag": 1, "lewis": 1, "matt": 1, "notin": 0}
>>> d=dict((k, 0) for k in d)
>>> d
{'newaccount': 0, 'swag': 0, 'notin': 0, 'NewAccount1': 0, 'Matt1': 0, 'testyear4': 0, 'Lewis': 0, 'dan': 0, 'matt': 0, 'results': 0, 'm@tt': 0, 'green': 0, 'testyear5': 0, 'lewis': 0, 'NewAccount2': 0, 'y3': 0, 'testyear3': 0, 'egg': 0, 'testyear6': 0}

现在,
d
的每个元素都是一个新的列表(或者您希望将元组的值部分设置为可更改或不可更改的任何内容)。

如果您不想创建一个新的dict,您似乎只需要一个简单的两行循环,除非我遗漏了什么:

>>> d=dict((k, list()) for k in d)

添加到alecxeasnwer

你的字典是

for key in completeddict.keys():
    completeddict[key] = 0
现在可以使用默认值更新此词典

completeddict = {"green": 0, "y3": 1, "m@tt": 0, "newaccount": 0, "egg": 0, "results": 0, "dan": 0, "Lewis": 0, "NewAccount2": 0, "testyear3": 1, "testyear6": 0, "NewAccount1": 0, "testyear4": 0, "testyear5": 0, "Matt1": 0, "swag": 1, "lewis": 1, "matt": 1, "notin": 0}
完成了。您的completeddict将更新为所有键的默认值

例:

输出:

a = {'x':2,'y':4}
print id(a)  
print a
a.update({}.fromkeys(a,0))
print id(a)
print a

42612608
completeddict.clear()
应重置条目。检查。

不需要
.keys()
。如果您使用的是较旧的Python2,则第二种形式很重要。2.7版中没有添加dict理解吗?Python 2.6最终版于2008年发布;在某些时候,人们将不得不升级。而且,由于Python 2.4甚至支持生成器表达式,
dict((k,0)对于completedict中的k)
将是一个几乎同样简洁的选择。在尝试此操作时,我得到了错误“y6completeddict中的键:UnboundLocalError:赋值前引用的局部变量“y6completeddict”。@user312327,如果此答案解决了您的问题,请将其标记为“已接受”,以便将来的读者能够快速找到答案+1,这是我的最爱之一。只需确保不执行
{}.fromkeys(d,[])
这将在这里起作用,但值得记住的是,所有值都是相同的
,因此如果
是可变的——比如说一个空列表——您将遇到麻烦。哈!你在可变论点问题上击败了我,但我在这个问题上击败了你!;-)@DSM:通常是这样;-}我认为您误解了Python中的一个基本概念:如果您有一个名为
completeddict
的dict,然后您说
completeddict=something\u new
,那么您的其余代码将使用一些新的东西,而没有任何问题。另请参阅:PHP OP的等效问答想要
将所有值更改为0和不要删除dict中的所有键和值。这是完全清空dict的好方法,但不适用于OP需要的内容。
completeddict = {"green": 0, "y3": 1, "m@tt": 0, "newaccount": 0, "egg": 0, "results": 0, "dan": 0, "Lewis": 0, "NewAccount2": 0, "testyear3": 1, "testyear6": 0, "NewAccount1": 0, "testyear4": 0, "testyear5": 0, "Matt1": 0, "swag": 1, "lewis": 1, "matt": 1, "notin": 0}
completeddict.update({}.fromkeys(completeddict,0)
a = {'x':2,'y':4}
print id(a)  
print a
a.update({}.fromkeys(a,0))
print id(a)
print a
42612608     <--- id of dict 'a'
{'y': 4, 'x': 2}     <--- dict 'a' before updation
42612608     <--- id of dict 'a'   
{'y': 0, 'x': 0}     <--- dict 'a' after updation