如何索引到字典中?

新手上路,请多包涵

我在下面有一个字典:

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

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

colors[0] 将返回 KeyError 原因很明显。

原文由 Harpal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 456
2 个回答

在 Python 3.6 及之前的版本中,字典是无序的。如果您不关心条目的顺序并希望通过索引访问键或值,您可以使用 keys = list(d) 为字典 d 创建一个键列表,并且然后通过索引 keys[i] 访问列表中的键,并使用 d[keys[i]] 的关联值。

如果您确实关心条目的顺序,从 Python 2.7 开始,您可以使用 collections.OrderedDict 。或使用对列表

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

如果您不需要按键访问。 (顺便说一下,为什么你的数字是字符串?)

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

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

从 Python 3.7 \* 开始,字典是 保留顺序的,即它们现在的行为类似于 collections.OrderedDict s。不幸的是,仍然没有专门的方法来索引字典的 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 第一个键,那么同样

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 开始的插入顺序字典。

原文由 Pasha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题