Как получить случайное значение в словаре python

как я могу получить случайную пару из dict? Я делаю игру, где вам нужно угадать столицу страны, и мне нужны вопросы, чтобы появиться случайным образом.

на dict выглядит так:{'VENEZUELA':'CARACAS'}

как я могу это сделать?

12 ответов


в одну сторону (в Python 2.*) будет:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(d.keys())

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

country, capital = random.choice(list(d.items()))

Я написал это, пытаясь решить ту же проблему:

https://github.com/robtandy/randomdict

Он имеет O (1) случайный доступ к ключам, значениям и элементам.


если вы не хотите использовать random модуль, вы также можете попробовать popitem():

>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)

С dict не сохраняет порядка!--7-->, С помощью popitem вы получаете элементы в произвольном (но не строго случайном) порядке от него.

также имейте в виду, что popitem удаляет пару ключ-значение из словаря, как говорится в docs.

popitem () полезно деструктивно перебирать словарь


>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'

по телефону случайные.выбор на keys словаря (стран).


попробуйте это:

import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]

Это, безусловно, работает.


Так как это домашнее задание:

проверить random.sample() который будет выбирать и возвращать случайный элемент из списка. Вы можете получить список ключей словаря с помощью dict.keys() и список значений словаря с dict.values().


Если вы не хотите использовать random.choice() вы можете попробовать так:

>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'

Я предполагаю, что вы делаете викторины вид приложения. Для такого рода приложений я написал функцию, которая выглядит следующим образом:

def shuffle(q):
"""
The input of the function will 
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
selected_keys = []
i = 0
while i < len(q):
    current_selection = random.choice(q.keys())
    if current_selection not in selected_keys:
        selected_keys.append(current_selection)
        i = i+1
        print(current_selection+'? '+str(q[current_selection]))

если я дам вход questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'} и вызвать функцию shuffle(questions) тогда выход будет следующим:

VENEZUELA? CARACAS
CANADA? TORONTO

вы можете расширить это еще больше, перетасовав параметры также
Надеюсь, это поможет.
Источник:РАДИУС ОКРУЖНОСТИ


Так как исходный пост хотел пара:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))

(стиль python 3)


попробуйте это (используя random.выбор из пунктов)

import random

a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
#  ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
#  'num'

b = { 'video':0, 'music':23,"picture":12 } 
random.choice(tuple(b.items())) ('music', 23) 
random.choice(tuple(b.items())) ('music', 23) 
random.choice(tuple(b.items())) ('picture', 12) 
random.choice(tuple(b.items())) ('video', 0) 

это работает в Python 2 и Python 3:

случайный ключ:

random.choice(list(d.keys()))

случайное значение

random.choice(list(d.values()))

случайный ключ и значение

random.choice(list(d.items()))