我不明白这一点,在我理解之前它会困扰我。
此 python 代码计算每个字符在“消息”变量中出现的次数:
message = 'Some random string of words'
dictionary= {}
for character in message.upper():
dictionary.setdefault(character,0)
dictionary[character] = dictionary[character] + 1
print(dictionary)
如果多次运行此程序,您会注意到每次返回的计数似乎都是随机的。为什么是这样?我认为循环应该每次都从字符串的开头开始,并以一致的顺序返回值……但事实并非如此。 setdefault()
、print()
或 upper()
方法中是否存在影响字符串?
最佳答案
因为两件事:
- 字典“未排序”。您当然会得到一些顺序,但除其他外,它取决于键的哈希值。
- 您使用(单字符)字符串作为键,字符串散列是随机的。如果你执行
print(hash(message))
或者甚至只是print(hash('c'))
那么你会发现每次运行都不同
因此,由于顺序取决于哈希值,并且哈希值会从一次运行到下一次运行发生变化,因此您当然可以获得不同的顺序。
另一方面,如果您在同一次运行中重复它,您可能会得到相同的顺序:
message = 'Some random string of words'
for _ in range(10):
dictionary= {}
for character in message:
dictionary.setdefault(character,0)
dictionary[character] = dictionary[character] + 1
print(dictionary)
我刚刚运行了它,它按预期打印了十次完全相同的命令。然后我再次运行它,它打印了一个不同的订单,但又重复了十次。正如预期的那样。
关于python - python字典中返回值的随机顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38779921/