python - python字典中返回值的随机顺序

标签 python

我不明白这一点,在我理解之前它会困扰我。

此 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/

相关文章:

用于文件上传和持久连接的python库?

python - 在python和mysql中插入特定日期范围内的csv数据

python - 从 Python 列表中获取字符串?

Python 函数引用

python unittest因源代码中的相对导入而失败

python - 如何在 python 中允许多行用户输入?

python:如何更改函数输入参数的值?

python - 如何从 Pandas (同一列)中扣除值(value)?

python - Matplotlib 直方图 : glitch when setting rwidth to 0. 9

python - 在 Python 上从十六进制字符串转换为 int 而不删除前导零