获取字典的随机子集

时间:2018-11-02 19:46:54

标签: python dictionary random

免责声明:我知道有一个名为

的问题

Get a random sample of a dict

但是,显然我的不是重复的。该问题的答案主要集中在计算字典随机子集的值之和,因为这是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答案。

1 个答案:

答案 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}