为了账号安全,请及时绑定邮箱和手机立即绑定

如何索引字典?

如何索引字典?

弑天下 2019-11-28 13:57:42
我在下面有一个字典:colors = {    "blue" : "5",    "red" : "6",    "yellow" : "8",}如何索引字典中的第一个条目?colors[0]KeyError由于明显的原因将返回。
查看完整描述

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中依赖它。


查看完整回答
反对 回复 2019-11-28
?
哔哔one

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以后的有序字典。)


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 942 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信