如何重置字典中的所有值

use*_*327 5 python dictionary

{"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)

  • 这将在这里工作,但值得记住,所有值都是*相同的*`值`,所以如果`value`是可变的 - 说一个空列表 - 你会遇到麻烦. (7认同)
  • +1,我最喜欢的一个.只要确保你不做`{}.fromkeys(d,[])` (2认同)

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 2.6决赛于2008年问世; 在某些时候人们将不得不升级.而且,即使Python 2.4支持生成器表达式,`dict((k,0)表示完成后的k)`将是一个几乎简洁的替代方案. (3认同)
  • `.keys()`是不必要的. (2认同)
  • 如果您使用较旧的Python2,那么第二种形式很重要.在2.7中没有添加dict理解吗? (2认同)

daw*_*awg 5

几乎可以在任何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都是一个新列表(或者您希望将元组的值部分设置为可变的其他任何变量)。


Bry*_*ley 5

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

for key in completeddict.keys():
    completeddict[key] = 0
Run Code Online (Sandbox Code Playgroud)