python – 从非空的defaultdict中挑选一个随机元素

说我同意:

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

然后我选择一个随机元素:

random.choice(d)

现在让我们打印d:

defaultdict(list, {0: [], 'foo': ['bar']})

为什么random.choice添加0作为键?

最佳答案 在内部这是
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.

点赞