在Python中访问字典中的任意元素

593 投票
14 回答
566286 浏览
提问于 2025-04-16 00:18

如果mydict这个字典不为空,我可以这样访问其中的一个元素:

mydict[list(mydict.keys())[0]]

有没有更好的方法来做到这一点呢?

14 个回答

60

在Python3中,方法是:

dict.keys() 

当我们用这种方式获取字典的第一个键时,会出现错误,因为返回的值是 dict_keys() 类型:

dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing

最后,我先把 dict.keys() 转换成列表,然后通过列表切片的方法获取第一个成员:

list(dict.keys())[0]
180

如果你只需要访问一个元素(碰巧是第一个,因为字典不保证顺序),你可以在 Python 2 中这样做:

my_dict.keys()[0]    # key of "first" element
my_dict.values()[0]  # value of "first" element
my_dict.items()[0]   # (key, value) tuple of "first" element

请注意(根据我所知),Python 并不保证连续两次调用这些方法会返回顺序相同的列表。在 Python 3 中,这种情况是不被支持的。

Python 3 中:

list(my_dict.keys())[0]    # key of "first" element
list(my_dict.values())[0]  # value of "first" element
list(my_dict.items())[0]   # (key, value) tuple of "first" element
691

在Python 3中,可以以不破坏原有数据的方式,逐步进行操作:

next(iter(mydict.values()))

在Python 2中,也可以以不破坏原有数据的方式,逐步进行操作:

mydict.itervalues().next()

如果你想让代码在Python 2和3中都能运行,可以使用six这个包:

six.next(six.itervalues(mydict))

不过到目前为止,这个包的用法有点复杂,我更喜欢你的代码。

如果你想删除某个项目,可以这样做:

key, value = mydict.popitem()

需要注意的是,“第一个”这个词可能不太合适,因为在Python 3.6之前,dict(字典)是没有顺序的。而在Python 3.6及之后的版本中,dict是有顺序的。

撰写回答