python中的顺序字典索引

2024-06-30 14:55:38 发布

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

我已经创建了一个顺序字典,无法从中获取索引。 我已经通过了下面的网址,但没有工作。

Accessing dictionary value by index in python

这是我的代码和输出。

line_1 = OrderedDict((('A1', "Miyapur"), ('A2', "JNTU College"), ('A3', "KPHB Colony"),
                ('A4', "Kukatpally"), ('A5', "Balanagar"), ('A6', "Moosapet"),
                ('A7', "Bharat Nagar"), ('A8', "Erragadda"), ('A9', "ESI Hospital"),
                ('A10', "S R Nagar"), ('X1', "Ameerpet"), ('A12', "Punjagutta"),
                ('A13', "Irrum Manzil"), ('A14', "Khairatabad"), ('A15', "Lakdikapul"),
                ('A16', "('Assembly"), ('A17', "Nampally"), ('A18', "Gandhi Bhavan"),
                ('A19', "Osmania Medical College"), ('X2', "MG Bus station"), ('A21', "Malakpet"),
                ('A22', "New Market"), ('A23', "Musarambagh"), ('A24', "Dilsukhnagar"),
                ('A25', "Chaitanyapuri"), ('A26', "Victoria Memorial"), ('A27', "L B Nagar")))

print(line_1.values()[1])
print(line_1[1])
print(line_1.keys()[1])

上述所有选项都无法按引用链接中所述工作。 任何指导都是非常感谢的。 这是按给定顺序输出的每个print语句。

TypeError: 'odict_values' object does not support indexing

KeyError: 1

TypeError: 'odict_keys' object does not support indexing


Tags: support字典object顺序linenotkeysvalues
2条回答

在Python 3中,字典(包括OrderedDict)从其keys()values()方法返回“view”对象。这些是iterable,但不支持索引。您链接的答案似乎是为Python 2编写的,其中keys()values()返回了列表。

有几种方法可以使代码在Python3中工作。一个简单(但可能很慢)的选项是将view对象传递给list(),然后对其进行索引:

print(list(line_1.values())[1])

另一个选项是使用itertools.islice在视图对象上迭代到所需的索引:

import itertools

print(next(itertools.islice(line_1.values(), 1, 2)))

但所有这些解决方案都很难看。在这种情况下,字典可能不是最好的数据结构。如果您的数据在一个简单的列表中,那么按索引查找任何项都很简单(但是按键查找会更困难)。

TypeError: 'odict_values' object does not support indexing

您需要先将其设置为list,然后访问它:

print(list(line_1.values())[1]) # or print([*line_1.values()][1])

这些view(在Python 3中是新的)对象更像是不支持索引它们的集合。

KeyError: 1

1不在有序字典中,因此KeyError。使用一个有效的键,比如'A1

TypeError: 'odict_keys' object does not support indexing

如前所述,将其设为list以便对其进行索引。


这同样适用于line_1.items,为了索引它,您应该首先将它强制转换为支持索引的对象(listtuple,自定义等)

相关问题 更多 >