{"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}
Run Code Online (Sandbox Code Playgroud)
这是定义为'completeddict'的字典.我想要做的是改变所有值,无论它们被调用为0.但是请记住,新的帐户名称将在任何时候添加为"键",所以我不能手动执行"completeddict [green] = 0 ","完成了[lewis] = 0"等等.
有没有办法让python将字典中的所有值更改回0?
编辑:不幸的是我不想创建一个新的字典 - 我想保持它称为'completeddict',因为程序需要在程序的许多点使用定义为'completeddict'的字典.
ale*_*cxe 29
另一种选择是使用.fromkeys()
:
fromkeys(seq [,value])
使用seq中的键创建一个新字典,并将值设置为value.
d = d.fromkeys(d, 0)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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}
Run Code Online (Sandbox Code Playgroud)
wnn*_*maw 12
当然,它非常简单:
newDict = {key: 0 for key in completeddict}
Run Code Online (Sandbox Code Playgroud)
这是字典理解,相当于:
newDict = {}
for key in completeddict:
newDict[key] = 0
Run Code Online (Sandbox Code Playgroud)
这些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}
Run Code Online (Sandbox Code Playgroud)
然后可以将其与可变参数或某种形式的callable结合使用:
>>> d=dict((k, list()) for k in d)
Run Code Online (Sandbox Code Playgroud)
现在,的每个元素d
都是一个新列表(或者您希望将元组的值部分设置为可变的其他任何变量)。
如果你不想创建一个新的 dict,你只需要一个简单的两行循环,除非我遗漏了一些东西:
for key in completeddict.keys():
completeddict[key] = 0
Run Code Online (Sandbox Code Playgroud)