免责声明:我知道有一个名为
的问题但是,显然我的不是重复的。该问题的答案主要集中在计算字典随机子集的值之和,因为这是OP真正想要的。相反,我确实需要提取一个子集。
我有一个非常大的字典,我想提取一个子样本,然后在其上进行迭代。我尝试过:
DOM
但这不起作用:
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'
这似乎有点虚假:我希望将有一种向量化的方式来构建新词典。但是,这是正确/最Python化的方法吗?另外,如果要迭代此示例,我应该这样做吗:
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}
我的问题不是
的重复项how to randomly choose multiple keys and its value in a dictionary python
要么是因为该问题的答案并未完全解决我的问题。这比我的尝试还要糟糕:它不是创建示例字典,而是对键进行采样,然后分别检索值。显然,它不是很pythonic,我明确要求一个pythonic答案。
答案 0 :(得分:1)
使用
dict(random.sample(dictionary.items(), N))
您可以从字典中选择N
个随机(键,值)对,并将它们传递给dict
构造函数。
演示:
>>> import random
>>> dictionary = dict(enumerate(range(10)))
>>> dictionary
>>> {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> N = 3
>>> dict(random.sample(dictionary.items(), N))
>>> {3: 3, 6: 6, 9: 9}