说我同意:

import collections, random
d = collections.defaultdict(list)
d['foo'].append('bar')

然后我选择一个随机元素:
random.choice(d)

现在让我们打印 d :
defaultdict(list, {0: [], 'foo': ['bar']})

为什么random.choice要添加0作为key?

最佳答案

在内部,这就是 random.choice 所做的:

def choice(self, seq):
    """Choose a random element from a non-empty sequence."""
    return seq[int(self.random() * len(seq))]

与您的情况一样,长度为 1,乘法后将产生 [0.0, 1.0) 范围内的数字,并且在对它应用 int() 后,您将得到 0。

请注意,defaultdict 将向在其上访问的 dict 添加任何键:
>>> d = collections.defaultdict(list)
>>> d['i dont exist']
[]
>>> d
defaultdict(<type 'list'>, {'i dont exist': []})

因此,您的 dict 以 0 结束。

关于python - 从非空 defaultdict 中选择一个随机元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38868130/

10-12 22:37