ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : я знаю есть вопрос с именем
Получить случайную выборку из диктанта
но мой, конечно, не дубликат. Ответы на этот вопрос в основном сосредоточены на вычислении суммы значений случайного подмножества словаря, потому что именно этого действительно хотел ОП. Вместо этого мне действительно нужно извлечь подмножество.
У меня очень большой словарь, и я хочу извлечь подвыборку, которую затем хочу повторить. Я попробовал:
import random
dictionary = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
keys = random.sample(dictionary, 3)
sample = dictionary[keys]
Но это не работает:
Traceback (most recent call last):
File "[..]/foobar.py", line 4, in <module>
sample = dictionary[keys]
TypeError: unhashable type: 'list'
Это работает:
import random
dictionary = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
keys = random.sample(dictionary, 3)
sample = {key: dictionary[key] for key in keys}
Кажется, это немного словечко: я надеялся, что будет найден векторизованный способ создания нового словаря. Тем не менее, это правильный / самый Pythonic способ сделать это? Кроме того, если я хочу повторить этот пример, я должен сделать так:
for key, value in sample.iteritems():
print(key, value)
Мой вопрос не является дубликатом
как случайным образом выбрать несколько ключей и их значение в словаре python
либо, потому что ответ на этот вопрос не полностью отвечает на мой вопрос. Это даже хуже, чем моя попытка: вместо создания примера словаря он выбирает ключи и затем получает значения отдельно. Это, очевидно, не очень питонический, и я явно попросил питонного ответа.