如何编入词典索引?

2020-12-04 10:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典在下面:

colors = {
    "blue" : "5",
    "red" : "6",
    "yellow" : "8",
}

如何索引字典中的第一个条目?

由于明显的原因,colors[0]将返回一个KeyError

3条回答
网友
1楼 ·

解决字典的一个要素就像坐在驴子上享受这段旅程。

根据Python的规则,字典是无顺序的

如果有的话

dic = {1: "a", 2: "aa", 3: "aaa"}

现在假设如果我像dic[10] = "b"那样走,那么它不会一直像这样添加

dic = {1:"a",2:"aa",3:"aaa",10:"b"}

可能是

dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}

或者

dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}

或者

dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}

或任何这样的组合。

所以经验法则是字典是无序的!

网友
2楼 ·

在Python 3.6之前(包括python3.6)的Python版本中,字典是无序的。如果您不关心条目的顺序,并且仍然希望通过索引访问键或值,则可以使用d.keys()[i]d.values()[i]d.items()[i]。(请注意,这些方法在Python2.x中创建了一个包含所有键、值或项的列表。因此,如果您需要这些键、值或项,请将其存储在一个变量中,以提高性能。)

如果您确实关心条目的顺序,那么可以从Python 2.7开始使用^{}。或使用配对列表

l = [("blue", "5"), ("red", "6"), ("yellow", "8")]

如果不需要通过密钥访问。(顺便问一下,为什么你的数字是字符串?)

在Python3.7中,普通的字典是有序的,因此您不再需要使用OrderedDict(但您仍然可以使用–它基本上是相同的类型)。Python 3.6的CPython实现已经包含了这个更改,但是由于它不是语言规范的一部分,所以在python3.6中不能依赖它。

网友
3楼 ·

如果有人还在看这个问题,现在接受的答案已经过时了:

Since Python 3.7*这些字典是保序的,也就是说它们现在的行为与过去完全一样。不幸的是,仍然没有专门的方法来索引到字典的keys()/values(),因此获取字典中的第一个键/值可以如下所示

first_key = list(colors)[0]
first_val = list(colors.values())[0]

或者(这样可以避免将keys视图实例化为列表):

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已经包含了有序的dict,但这只是一个实现细节。语言规范包括从3.7开始的有序听写。)

相关问题