3 回答
TA贡献1784条经验 获得超2个赞
在Python版本(包括Python 3.6)及更高版本中,字典是无序的。如果您不关心条目的顺序,并且仍然想通过索引访问键或值,则可以使用d.keys()[i]和d.values()[i]或d.items()[i]。(请注意,这些方法创建了Python 2.x中所有键,值或项的列表。因此,如果需要多次,则将该列表存储在变量中以提高性能。)
如果您确实关心条目的顺序,那么从python 2.7开始,您可以使用collections.OrderedDict。或使用成对清单
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
如果您不需要通过密钥访问。(为什么您的数字是字符串?)
在Python 3.7中,常规字典是有序的,因此您不再需要使用它OrderedDict(但您仍然可以–它基本上是相同的类型)。Python 3.6的CPython实现已经包含了这一更改,但是由于它不是语言规范的一部分,因此您不能在Python 3.6中依赖它。
TA贡献1854条经验 获得超8个赞
如果仍然有人在看这个问题,那么当前接受的答案已经过时了:
由于Python 3.7 *字典是顺序保留的,因此它们现在的行为与collections.OrderedDicts 完全相同。不幸的是,仍然没有专用的方法可以索引到字典的keys()/ values()中,因此可以通过以下方法获取字典中的第一个键/值:
first_key = list(colors)[0]
first_val = list(colors.values())[0]
或者(避免将键视图实例化为列表):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
如果您需要n-th键,则类似
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6已经包含有序字典,但这只是实现细节。语言规范包括3.7以后的有序字典。)
添加回答
举报