{"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”,“completeddict [lewis] = 0”等等。
有没有办法让python将字典中的所有值更改回0?
编辑:不幸的是我不想创建一个新的字典 - 我想把它称为'completeddict',因为程序需要在程序的许多点使用定义为'completeddict'的字典。答案 0 :(得分: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}
答案 1 :(得分:11)
当然,它非常简单:
newDict = {key: 0 for key in completeddict}
这是字典理解,相当于:
newDict = {}
for key in completeddict:
newDict[key] = 0
这些dict理解是在v2.7中引入的,因此较旧的vesions将需要使用扩展形式。
答案 2 :(得分: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
的每个元素都是一个新列表(或者其他任何你想要设置元组值部分的可变对象)。
答案 3 :(得分:2)
如果你不想创建一个新的词典,你似乎只需要一个简单的两行循环,除非我遗漏了一些东西:
for key in completeddict.keys():
completeddict[key] = 0
答案 4 :(得分:0)
添加 alecxe asnwer,
你的字典是,
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在使用默认值更新之后也是相同的。
答案 5 :(得分:0)
completeddict.clear()
应该重置条目。检查Python Docs。