2013-08-01 21 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

の答えをご覧ください。申し訳ありませんが、私は誤解していました。今、順序付けされた順序付けられていない辞書の重要性を理解しています。 – 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'] 
関連する問題