{"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'的字典。
另一种选择是使用.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}
当然,它非常简单:
newDict = {key: 0 for key in completeddict}
这是字典理解,相当于:
newDict = {}
for key in completeddict:
newDict[key] = 0
这些dict理解是在v2.7中引入的,因此较旧的vesions将需要使用扩展形式。
几乎可以在任何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
的每个元素都是一个新的列表(或者你想要设置元组的值部分的任何其他可变的列表)。
如果你不想创建一个新的dict,看起来你需要的只是一个简单的两行循环,除非我遗漏了一些东西:
for key in completeddict.keys():
completeddict[key] = 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在使用默认值更新之后也是相同的。