【问题标题】:Python: How do I randomly select a value from a dictionary key?Python:如何从字典键中随机选择一个值?
【发布时间】:2015-05-25 15:43:48
【问题描述】:

我有一本字典:

dict = {
    "Apple": ["Green", "Healthy", "Sweet"],
    "Banana": ["Yellow", "Squishy", "Bland"],
    "Steak": ["Red", "Protein", "Savory"]
}

我想从每个键中打印一个随机值,所以我首先尝试将它们放入一个列表中:

import random

food = [dict.value.random.choice()]

但这不起作用(不足为奇,它看起来过度和混乱)

然后我想printfood:

print food

然后看看:

green
squishy
savory

或随机选择的任何值。

不需要创建列表吗?我会继续发布尝试。

只是为了澄清为什么这不是重复的:我不想从字典中随机抓取一个项目,我想从字典中的每个列表中随机抓取一个项目。

【问题讨论】:

标签: python list dictionary random key-value


【解决方案1】:

您可以使用列表推导来循环您的值:

>>> my_dict = {
...     "Apple": ["Green", "Healthy", "Sweet"],
...     "Banana": ["Yellow", "Squishy", "Bland"],
...     "Steak": ["Red", "Protein", "Savory"]
... }
>>> import random
>>> food=[random.choice(i) for i in my_dict.values()]
>>> food
['Savory', 'Green', 'Squishy']

对于您想要的打印,您可以使用 join 函数或循环 food 并一一打印元素:

>>> print '\n'.join(food)
Savory
Green
Squishy
>>> for val in food :
...      print val
... 
Savory
Green
Squishy

【讨论】:

    【解决方案2】:

    你也可以使用 for 循环:

    import random
    
    dict = {
        "Apple": ["Green", "Healthy", "Sweet"],
        "Banana": ["Yellow", "Squishy", "Bland"],
        "Steak": ["Red", "Protein", "Savory"]
    }
    
    for key, value in dict.items():
        print random.choice(value), key
    

    结果:

    Red Steak
    Healthy Apple
    Bland Banana
    

    【讨论】:

      【解决方案3】:

      使用列表推导式

      import random
      choices = [random.choice(v) for k, v in your_dict.items()] # iterate over the dict items
      print(choices)
      

      输出

      ['Protein', 'Green', 'Squishy']
      

      【讨论】:

      • 不是我的反对意见,但可能是因为您的答案与@Kasra 完全相同
      • 这不完全相同,所有三个答案几乎是同时创建的。我认为相似性不是很好的理由。
      【解决方案4】:

      (顺便说一句-将名称“dict”更改为其他名称)

      # for python3
      from random import randint
      data = {
        "Apple": ["Green", "Healthy", "Sweet"],
        "Banana": ["Yellow", "Squishy", "Bland"],
        "Steak": ["Red", "Protein", "Savory"]
      }
      
      for  key, value in data.items():
        print(key + ":" + value[randint(0,2)])
      

      输出(将根据随机 int 值而变化)

      sh-4.2# python3 main.py                                                                                                                                                         
      Apple:Sweet                                                                                                                                                                     
      Steak:Red                                                                                                                                                                       
      Banana:Squishy                                                                                                                                                                    
      

      修正案 01(@Selcuk 的问题)

      for  key, value in data.items():
        length = len(value)
        print(key + ":" + value[randint(0,length-1)])
      

      【讨论】:

      • 如果某些列表比其他列表长会怎样?
      • 对!由于明显的关联,我倾向于在示例中使用“dict”,而忘记了“dict”是内置的。
      • @Selcuk- 希望这能回答你的问题(我原来的答案的修订 01)
      【解决方案5】:

      在彻底阅读文档并使用上面提供的所有非常有用的答案后,我发现这是最干净和最明显的:

      import random  
      
      food_char = {
          "Apple": ["Green", "Healthy", "Sweet"],
          "Banana": ["Yellow", "Squishy", "Bland"],
          "Steak": ["Red", "Protein", "Savory"]
      }
      
      food=[random.choice(i) for i in food_char.values()]
      
      for item in food:
          print item
      

      【讨论】:

        猜你喜欢
        • 2016-09-06
        • 1970-01-01
        • 2015-01-09
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2020-03-17
        相关资源
        最近更新 更多