如何迭代字典中的一系列键?

时间:2013-08-01 21:02:42

标签: python dictionary

如何迭代字典中的一系列键?

例如,如果我有以下字典:

{'Domain Source': 'Analyst', 'Recommend Suppress': 'N', 'Standard Error': '0.25', 'Element ID': '1.A.1.d.1', 'N': '8', 'Scale ID': 'IM', 'Not Relevant': 'n/a', 'Element Name': 'Memorization', 'Lower CI Bound': '2.26', 'Date': '06/2006', 'Data Value': '2.75', 'Upper CI Bound': '3.24', 'O*NET-SOC Code': '11-1011.00'}

如何在标准错误后仅迭代键?理想情况下,我希望获得标准错误后的所有值。

谢谢!


只是为了解决评论:我知道iteritems(),但是当我尝试下载时,返回了一个错误:不可订阅。此外,键/值每次都以相同的顺序排列。

4 个答案:

答案 0 :(得分:6)

Python字典中的键没有任何特定的顺序。

您需要使用OrderedDict代替。

例如:

>>> d = OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])

现在保证按顺序返回密钥:

>>> d.keys()
['key1', 'key2', 'key3']

如果您想获取特定值后的所有密钥,可以使用itertools.dropwhile

>>> import itertools
>>> list(itertools.dropwhile(lambda k: k != 'key2', d.iterkeys()))
['key2', 'key3']

答案 1 :(得分:2)

这里的问题是Python词典是无序的,所以在'Standard Error'之后迭代键是没有意义的。

答案 2 :(得分:1)

问题是,字典是无序的。一旦你做到了,你就无法依赖物品的顺序。因此,如果您需要通用解决方案,可以使用OrderedDict

如果您已在字典中包含数据,则可以明确排除两个第一个键:

>>> d = {'Domain Source': 'Analyst', 'Recommend Suppress': 'N', 'Standard Error': '0.25', 'Element ID': '1.A.1.d.1', 'N': '8', 'Scale ID': 'IM', 'Not Relevant': 'n/a', 'Element Name': 'Memorization', 'Lower CI Bound': '2.26', 'Date': '06/2006', 'Data Value': '2.75', 'Upper CI Bound': '3.24', 'O*NET-SOC Code': '11-1011.00'}
>>> [x for x in d if x not in ('Domain Source', 'Recommend Suppress')]
['N', 'Scale ID', 'Not Relevant', 'Element Name', 'Data Value', 'Standard Error', 'Element ID', 'Lower CI Bound', 'Date', 'Upper CI Bound', 'O*NET-SOC Code']

答案 3 :(得分:1)

字典不会以您添加它们的相同顺序存储键/值对...除非使用OrderedDict。方法如下:

entries = [('Domain Source', 'Analyst'), ('Recommend Suppress', 'N'),
 ('Standard Error', '0.25'), ('Element ID', '1.A.1.d.1'),
 ('N', '8'), ('Scale ID', 'IM'), ('Not Relevant', 'n/a'),
 ('Element Name', 'Memorization'), ('Lower CI Bound', '2.26'),
 ('Date', '06/2006'), ('Data Value', '2.75'), 
 ('Upper CI Bound', '3.24'), ('O*NET-SOC Code', '11-1011.00')]

from collections import OrderedDict
d = OrderedDict(entries)
d.keys()[2:]

=> ['Standard Error', 'Element ID', 'N', 'Scale ID', 'Not Relevant',
    'Element Name', 'Lower CI Bound', 'Date', 'Data Value',
    'Upper CI Bound', 'O*NET-SOC Code']