说我同意:
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.