【问题标题】:Select a random entry from a dictionary从字典中选择一个随机条目
【发布时间】:2020-04-04 08:49:09
【问题描述】:

我有以下 python 字典:

    truthDict = {
     1: False,
    -1: True,
     3: True,
    -3: False,
    -4: False,
     4: True,
     2: True,
    -2: True,
     5: False,
    -5: True
    }

我想将其中一个键翻转到逆:

我试过这个:

    pick = random.choice(truthDict.keys())  
    truthDict[pick] = not(truthDict[pick])

但是它不起作用,我非常感谢任何帮助。

【问题讨论】:

  • 预期输出是什么?
  • 这不只是标准字典访问吗?您找不到任何资源来学习如何做到这一点? 它不起作用 是什么意思?此外,变量和函数名称应遵循lower_case_with_underscores 样式。

标签: python python-3.x dictionary random


【解决方案1】:

你很接近,dict_keys 不支持索引,所以传递一个列表:

pick = random.choice([*truthDict])
truthDict[pick] = not truthDict[pick]

【讨论】:

  • [*truthDict]list(truthDict) 相比有什么区别/优势吗?
  • @MarkMeyer 唯一的区别是list(truthDict) 适用于当前生产中的每个 python 版本。编辑:实际上这并不准确,可迭代的解包语法比 list() 函数调用快一点。
  • @cs95 随着输入的增长,解包应该会慢得多,不是吗?
  • @AlexanderCécile 解包对我来说要快一点,字典至少有 1000 万个键。
【解决方案2】:

您可以在truthDict.keys() 周围使用list()

pick = random.choice(list(truthDict.keys()))
truthDict[pick]  = not(truthDict[pick])

时间:~5.72 µs


或使用*解压

pick = random.choice([*(truthDict.keys())])
truthDict[pick]  = not(truthDict[pick])

时间:~4.53 µs

【讨论】:

  • 是的,它不起作用我忘记添加[ ],正在编辑答案
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2015-01-09
  • 2022-01-21
  • 2016-04-14
  • 1970-01-01
  • 2015-05-25
相关资源
最近更新 更多