在Python中访问字典中的任意元素
如果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
是有顺序的。