Відповіді:
Один із способів:
import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.values()))
EDIT : Питання було змінено через пару років після початкової публікації, і тепер він вимагає пари, а не одного пункту. Остаточним рядком має бути:
country, capital = random.choice(list(d.items()))
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
Хе-х, +1 для дуже тонкої промивання мізків ...
Я написав це, намагаючись вирішити ту саму проблему:
https://github.com/robtandy/randomdict
Він має O (1) випадковий доступ до ключів, значень та предметів.
Спробуйте це:
import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]
Це безумовно працює.
Якщо ви не хочете використовувати 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 () корисно деструктивно перебирати словник
next
не працює зі словником, оскільки це відображення. (Я прийшов сюди за натхненням, і це було).
>>> 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
словник (країни).
random.choice(list(d.keys()))
.
Якщо ви не хочете використовувати 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'
list(…)
тут кілька разів. Як щодо myDictionary_list = list(myDictionary)
?
Оскільки це домашнє завдання:
Перевірте, random.sample()
який буде вибирати та повертати випадковий елемент зі списку. Ви можете отримати список клавіш словника dict.keys()
та список значень словника за допомогою dict.values()
.
random.sample
і random.choice
не може працювати з ітераторами. Вони повинні знати довжину послідовності, яку неможливо визначити за допомогою ітератора.
random.sample
повертає k
випадкові елементи , random.choice
повертає один випадковий елемент
Я припускаю, що ви робите заявку на вікторину. Для цього типу додатків я написав функцію, яка полягає в наступному:
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 КАНАДА? ТОРОНТО
Ви можете продовжити це ще більше, переміщуючи параметри
selected_keys
. І ви, ймовірно, повторите це приблизно 100 разів. Принаймні видаліть узяті клавіші q like del(q[current_selection])
- ви можете перезаписати q новою перетасованою так selected_keys
само, як і q = selected_keys
після всього. Також не забувайте про ідентифікацію! З іншого боку подивитися на мій np.random.choice(...)
підхід: stackoverflow.com/a/62843377/4575793
Спробуйте це (використовуючи random.choice з елементів)
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'
У сучасних версіях Python (з 3), об'єкти , які повертаються методами dict.keys()
, dict.values()
і dict.items()
є об'єктами вид *. І ей можна повторити, тож безпосередньо використовувати random.choice
неможливо, оскільки зараз вони не є списком чи набором.
Одним із варіантів є використання розуміння списку, щоб виконувати роботу з random.choice
:
import random
colors = {
'purple': '#7A4198',
'turquoise':'#9ACBC9',
'orange': '#EF5C35',
'blue': '#19457D',
'green': '#5AF9B5',
'red': ' #E04160',
'yellow': '#F9F985'
}
color=random.choice([hex_color for color_value in colors.values()]
print(f'The new color is: {color}')
Список літератури:
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)
Я знайшов цю посаду, шукаючи досить порівнянне рішення. Для вибору декількох елементів із диктату це можна використовувати:
idx_picks = np.random.choice(len(d), num_of_picks, replace=False) #(Don't pick the same element twice)
result = dict ()
c_keys = [d.keys()] #not so efficient - unfortunately .keys() returns a non-indexable object because dicts are unordered
for i in idx_picks:
result[c_keys[i]] = d[i]
d.keys()
є список, але він не працюватиме в Python 3.x, деd.keys()
є ітератором. Ви повинні зробити цеrandom.choice(list(d.keys()))
замість цього.