![](/img/trans.png)
[英]Why can I change dict values by referencing keys but not the values themselves?
[英]I have dict -> pairs = {2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0} trying to change the keys' values with for loop, not working,
import random
pairs = {2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0}
for i in range(0, 1001):
d1 = random.randrange(0, 7)
d2 = random.randrange(0, 7)
summ = d1 + d2
for k, v in pairs.items():
if summ == k:
k[v] += 1
你的意思是这样写的:
import random
pairs = {2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0}
for i in range(0, 1001):
d1 = random.randint(1, 6)
d2 = random.randint(1, 6)
summ = d1 + d2
pairs[summ] += 1
print(pairs)
我看到您正在搜索pairs
dict 以找到正确的密钥,这是一种奇怪的找到密钥的方法。 我现在看到原因是因为您使用的是randrange(0, 7)
,它产生的数字在0..6
的包含范围内。 这意味着summ
可能是0
或1
,这不是pairs
中包含的键之一。
通过使用randint(1, 6)
这更像是掷骰子,并在您pairs
准备的键的确切范围内给出summ
。 这允许我的版本只用pairs[summ] += 1
注册每个卷
您正在生成 1000 个随机掷骰子,然后计算它们。 这可以使用collections.Counter
有效地完成。
from collections import counter
from random import randint as r
pairs = dict(Counter(r(1, 6) + r(1, 6) for _ in range(1001)))
只需将k[v] += 1
更改为pairs[k] += 1
k
是 integer + 字典键,所以在这种情况下括号没有意义。
您也可以只遍历keys
,因为您并没有真正使用该 dict 循环中的值
for k in pairs.keys():
if summ == k:
pairs[k] += 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.