Как получить случайное значение в словаре Python - PullRequest
124 голосов
/ 01 февраля 2011

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

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

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

Ответы [ 12 ]

217 голосов
/ 01 февраля 2011

Один из способов (в Python 2. *):

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

РЕДАКТИРОВАТЬ : вопрос был изменен через пару лет после первоначального сообщения, и теперь запрашивает пару, а не один элемент.Последняя строка теперь должна быть:

country, capital = random.choice(list(d.items()))
25 голосов
/ 27 сентября 2015

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

https://github.com/robtandy/randomdict

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

15 голосов
/ 12 февраля 2014

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

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

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

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

popitem () полезен для деструктивной итерации по словарю

9 голосов
/ 01 февраля 2011
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'

Вызвав random.choice на keys словаря (страны).

8 голосов
/ 30 сентября 2015

Попробуйте:

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

Это определенно работает.

4 голосов
/ 12 апреля 2016

Поскольку исходное сообщение требовало пары :

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

(стиль Python 3)

4 голосов
/ 06 декабря 2014

Если вы не хотите использовать 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'
3 голосов
/ 04 сентября 2018

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

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

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

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

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

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

random.choice(list(d.items()))
3 голосов
/ 04 марта 2016

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

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

Вы можете расширить это, перетасовав также опции

3 голосов
/ 01 февраля 2011

Поскольку это домашняя работа:

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

...