尽管有很多问题的答案,但很少有人指出字典是无序的映射,因此(直到使用Python 3.7祝福插入顺序)字典中“第一个”条目的想法实际上是没道理 甚至OrderedDict
只能通过使用诸如以下的丑陋的数字索引来访问mydict[mydict.keys()[0]]
(仅Python 2,因为在Python 3中keys()
是不可下标的迭代器。)
从3.7开始,并在3,6中付诸实践-引入了新的行为,但直到3.7才包含在语言规范中-在字典的键,值或项上进行迭代(我相信,也设置)将首先产生最近插入的对象。仍然没有简单的方法可以通过数字插入索引来访问它们。
关于选择和“格式化”项目的问题,如果您知道要在字典中检索的键,通常可以将该键用作下标来检索它(my_var = mydict['Apple']
)。
如果您确实希望能够通过条目号为项目建立索引(而忽略了特定条目号会随着插入而改变的事实),那么适当的结构可能就是一个由两个元素组成的元组的列表。代替
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
您可以使用:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
在这种情况下,第一个条目采用mylist[0]
经典的列表扩展名形式,其值为('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
。您可以如下遍历整个列表:
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
但是,如果您知道要查找键“ Apple”,那么为什么不使用字典呢?
您可以通过缓存键列表来引入更高级别的间接访问,但是保持两个数据结构同步的复杂性将不可避免地增加代码的复杂性。