给定一个包含数百万个条目的python dict,从中获取和删除随机(k,v)对的最有效方法是什么?
dict不断增长,并且经常调用随机删除函数.
python2引用最多的解决方案random_key = random.choice(the_dict.keys())太慢了,因为首先创建了所有键的列表.由于dict中有许多元素,因此该解决方案不起作用.
另一个提出的解决方案是the_dict.popitem(),但这不会返回真正的随机对象,而是取决于dict的内部排序.
第三种解决方案也是减速器:
it = the_dict.iterkeys()
for i in range (random.randint(0, len(the_dict)-1)):
next(it)
random_key = next(it)
Run Code Online (Sandbox Code Playgroud)
在旁边remove_random(),有时the_dict.pop(x)需要特定密钥.因此,基于简单列表的二级索引不起作用.
用字典可以有效地解决这个问题吗?