如何重置字典中的所有值

问题描述 投票:4回答:5
{"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'的字典。我想要做的是改变所有值,无论它们被调用为0.但是请记住,新的帐户名称将在任何时候添加为“键”,所以我不能手动执行“completeddict [green] = 0 “,”完成了[lewis] = 0“等等。

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

编辑:不幸的是我不想创建一个新的字典 - 我想保持它称为'completeddict',因为程序需要在程序的许多点使用定义为'completeddict'的字典。

python dictionary
5个回答
28
投票

另一种选择是使用.fromkeys()

fromkeys(seq [,value])

使用seq中的键创建一个新字典,并将值设置为value。

d = d.fromkeys(d, 0)

演示:

>>> 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}

11
投票

当然,它非常简单:

newDict = {key: 0 for key in completeddict}

这是字典理解,相当于:

newDict = {}
for key in completeddict:
    newDict[key] = 0

这些dict理解是在v2.7中引入的,因此较旧的vesions将需要使用扩展形式。


2
投票

几乎可以在任何Python版本中使用的表单只是使用带有列表推导或生成器的dict构造函数:

>>> 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((k, list()) for k in d)

现在d的每个元素都是一个新的列表(或者你想要设置元组的值部分的任何其他可变的列表)。


2
投票

如果你不想创建一个新的dict,看起来你需要的只是一个简单的两行循环,除非我遗漏了一些东西:

for key in completeddict.keys():
    completeddict[key] = 0

0
投票

添加到alexa的答案,

你的字典是,

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)

完成。您的completeddict将使用所有键的默认值进行更新。

例如:

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

可以观察到字典的id在使用默认值更新之后也是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.