2015-03-22 1 views
4

У меня есть словарь:Python: как я произвольно выбираю значение из ключа словаря?

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

, и я хочу, чтобы напечатать одну случайную величину от каждого ключа, поэтому я пытался получить их в список первой:

import random 

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

, но это не работает (не удивительно, это не выглядит чрезмерным и сбивает с толку)

и я хочу, чтобы затем print еда:

print food 

и просто посмотреть:

green 
squishy 
savory 

или любое значение случайным образом выбран.

создает список не нужно? Я буду продолжать попытки публикации.

Чтобы уточнить, почему это не дубликат: я не хочу случайным образом захватывать элемент из словаря, я хочу случайно захватить элемент из каждого списка внутри словаря.

+2

Не используйте dict как имя переменной, потому что оно является встроенным. –

+0

Справа. Я использовал только «dict» для этого примера, так как все пары key: item также вымышлены. –

+0

Возможный дубликат [Как получить случайное значение в словаре python] (http://stackoverflow.com/questions/4859292/how-to-get-a-random-value-in-python-dictionary) – dshgna

ответ

5

Вы можете использовать список понимание в петлю над вашими значениями:

>>> 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 
3

Вы можете также использовать для цикла:

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'] 
+0

Почему downvote ? –

+0

Не мой нисходящий сигнал, но, вероятно, потому, что ваш ответ точно такой же, как @Kasra – Selcuk

+0

Это не совсем то же самое, и все три ответа были созданы почти одновременно. Я не думаю, что сходство - хорошее оправдание. –

1

(BTW-Изменение имени 'Словаре' на что-то другое)

# 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)]) 

Выход (будет меняться в зависимости от случайных ИНТ значений)

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

Поправка 01 (@ вопрос SELÇUK в)

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

Что происходит, если некоторые из списков длиннее других? – Selcuk

+0

Правильно! Я склонен использовать «dict» в примерах из-за очевидной ассоциации, забывая, что «dict» встроен. –

+1

@ Selcuk- Надеюсь, это ответит на ваш вопрос (поправка 01 на мой первоначальный ответ) –

0

После тщательного прохождения документации и используя все очень полезные ответы, представленные выше, это что я считаю самым чистым и очевидным:

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 
Смежные вопросы