Как получить случайную пару из dict
? Я делаю игру, где вам нужно угадать столицу страны, и мне нужны вопросы, чтобы появиться случайным образом.
dict
выглядит как {'VENEZUELA':'CARACAS'}
Как я могу это сделать?
Как получить случайную пару из dict
? Я делаю игру, где вам нужно угадать столицу страны, и мне нужны вопросы, чтобы появиться случайным образом.
dict
выглядит как {'VENEZUELA':'CARACAS'}
Как я могу это сделать?
Один из способов (в Python 2. *):
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(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
не сохраняет порядок, используя 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'
Вызвав random.choice в 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)
Это работает в Python 2 и Python 3:
Случайный ключ:
random.choice(list(d.keys()))
Случайное значение
random.choice(list(d.values()))
Случайный ключ и значение
random.choice(list(d.items()))
Попробуйте это (используя random.choice from items)
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)