从字典中随机删除项目

6 投票
6 回答
22074 浏览
提问于 2025-04-16 10:40

我该如何从Python字典中随机删除一些项目呢?

我需要从一个字典中删除指定数量的项目,所以我尝试使用 dict.popitem,我以为这个方法是随机的,但看起来并不是这样。

正如文档所说:

从字典中移除并返回一个任意的(键,值)对。

假设我有一个字典,像这样(举个例子):

>>> d = dict(zip((string.ascii_lowercase), range(1, 10)))
>>> d
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8}

现在我需要从中删除一些项目(删除的数量由用户指定)。

所以我写了这个:

>>> for _ in range(4):          # assume 4 items have to removed
...     d.popitem()
... 
('a', 1)
('c', 3)
('b', 2)
('e', 5)

但是这个代码的问题是,每次运行脚本时,popitem() 都会删除完全相同的项目。你可以自己测试一下,我已经试过很多次了。

所以我想问的是:

  • 为什么 popitem() 的表现和我预期的不一样?移除任意项目难道不是随机的吗?
  • 我该如何从字典中随机删除一些项目呢?

6 个回答

8

popitem() 方法是随意的,但不是随机的。如果你想获取一个随机的元素

import random
key = random.choice(d.keys())
val = d[key]
del d[key]
9

删除一个“任意”的元素意味着这个函数可以删除它想要的任何项目。这并不意味着它必须特别随意地去做。

如果你想要真正的随机性,应该使用 random 模块。比如:

import random
for key in random.sample(d.keys(), 4):
   del d[key]
24

你是在说这个吗?

import random
for i in range(4):
    some_dict.pop( random.choice(some_dict.keys()) )   

撰写回答