Python:如何从字典键中随机选择一个值?

Posted

技术标签:

【中文标题】Python:如何从字典键中随机选择一个值?【英文标题】:Python: How do I randomly select a value from a dictionary key? 【发布时间】: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

或随机选择的任何值。

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

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

【问题讨论】:

不要使用dict作为变量名,因为它是内置的。 对。我在这个例子中只使用了“dict”,因为所有的 key:item 对也是虚构的。 How to get a random value in python dictionary的可能重复 【参考方案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

【讨论】:

以上是关于Python:如何从字典键中随机选择一个值?的主要内容,如果未能解决你的问题,请参考以下文章

从字典键中提取值 - 然后组合成一个对象

从嵌套的dict中选择一个随机值,并在另一个嵌套的dict中更新它

具有 Unity 和 Firebase 数据库的字典数组 - 从键中获取值

如何使用 pyspark 从 python 列表中选择随机文本值?

如何更改字典中的所有键但保留值?

如何从多个JSON对象python的特定键中解析值