字典的非破坏性pop()版本

10 投票
5 回答
4073 浏览
提问于 2025-04-16 05:57

有没有什么简单的方法可以从字典里获取一个任意的键值对,而不把它们删掉? (P3K)

编辑:

抱歉,我的表述可能让人困惑。

我用“任意”这个词是指我对获取的内容没有特别的要求。

这和“随机”是不同的,随机是指我对获取的内容有要求(也就是说,我希望每个选项被选中的概率是一样的)。

而且我没有可以用的键;如果我有的话,我觉得这就属于“查手册”那种情况,不需要在StackOverflow上问。

编辑:

不幸的是,在P3K中,.items() 返回的是一个 dict_items 对象,这和Python 2不一样,后者返回的是一个迭代器:

ActivePython 3.1.2.4 (ActiveState Software Inc.) based on
Python 3.1.2 (r312:79147, Sep 14 2010, 22:00:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {1:2}
>>> k,v = next(d.items())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: dict_items object is not an iterator

5 个回答

-1

pop这个方法是用来移除一个项目的。这不是这个方法的意思吗?

如果你想获取一个随机的键值对,可以使用伪随机模块。

>>> import random
>>> x = {1:3, 4:5, 6:7}
>>> x = {1:3, 4:5, 6:7, 'a':9, 'z':'x'}
>>> k = random.choice(x.keys())
>>> x[k]
7
>>> 
-1

items()这个方法会把字典里的键和值以列表的形式返回。举个例子,

>fruits_color = {'apple': 'red', 'banana': 'green'}
>fruits_color.items()
[('apple', 'red'), ('banana', 'green')]

当你得到了这个列表后,就可以选择里面的键值对了。

8
k, v = next(iter(d.items())) # updated for Python 3

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言进行解释。

撰写回答