2013-08-01 59 views
5

如何迭代字典中的一系列鍵?如何遍歷字典中的一系列鍵?

舉例來說,如果我有以下的解釋:

{'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(),但是當我試圖下標,返回了一個錯誤:未標化。此外,鍵/值每次都以相同的順序出現。

+0

您可以使用iterkeys()方法迭代鍵。例如:[鍵爲mydict.iterkeys()中的鍵)。 –

+1

@HugoCorrá這只是在字典中的鍵是有用的存儲在他們插入的順序,因此看到答案jterrace – hetepeperfan

+0

對不起,我誤解了。現在我明白有序v。無序字典的重要性。 – goldisfine

回答

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'] 
2

這裏的問題是Python字典是無序的,因此在'Standard Error'之後遍歷密鑰沒有意義。

2

問題是,詞典是無序的。一旦你做到了,你就無法依賴項目的順序。所以,如果你想一般的解決方案,你可以使用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'] 
+0

需要iteritems()? – goldisfine

2

字典不存儲鍵/值按照您添加它們的順序進行配對...除非使用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']