2013-06-07 10 views
5

Python辞書と整数nが与えられているので、n番目のキーにアクセスする必要があります。私は私のプロジェクトでこれを何回も繰り返す必要があります。Python辞書でn番目のキーを抽出しますか?

私はこれを行う機能書かれています:

def ix(self,dict,n): 
    count=0 
    for i in sorted(dict.keys()): 
     if n==count: 
      return i 
     else: 
      count+=1 

をしかし、問題は辞書が巨大であれば繰り返し使用する場合、時間の複雑さが増すということです。

効率的な方法はありますか?

+0

最初に同じで高速なコードの '.keys()'を削除します。 – jamylak

+13

は、順序付けされていないコレクションの「n番目の要素」のようなものはありません。あなたは私が間違っている問題を表現しています。 – Elazar

+0

@jamylakよ、ありがとう!私は反復が.keys()もなくてもできることを知りませんでした。そして、主な質問に対する解決策がありますか? –

答えて

7

def ix(self, dic, n): #don't use dict as a variable name 
    try: 
     return list(dic)[n] # or sorted(dic)[n] if you want the keys to be sorted 
    except IndexError: 
     print 'not enough keys' 
+0

'list(dic)'はうまく動作します –

+0

@Ashwiniありがとうございますので、内部的にはPythonは辞書のすべてのキーを含むリストを作成しますか? –

+0

@HemanthMallaいいえ、python dictsはハッシュテーブルとして実装されています。 http://docs.python.org/2/faq/design.html#how-are-dictionaries-implemented –

0

辞書は順序付けられていないコレクションです。したがって、第1、第2または第n要素はありません。私はあなたがこのような何かをしたかったが、dic.keys内のキーの順序は何もすることができますので辞書として、任意の順序を持​​っていないと思い

+0

あなたは単一のdictを何度も印刷しようとしましたか?間に変更しない限り、毎回同じ注文です。 – Elazar

+1

いいえ、変更を加えずに同じdictを印刷しても、注文は変更されません。 –

+0

はい、ありがとう – sinhayash

6

ので、リストを返しますdict.keys()、あなたが必要とするすべての行うには、dict.keys()[n]

ですが、辞書は順不同コレクションはとてもn番目の要素は、このコンテキスト

+0

python3のiterableです。 – Elazar

+0

oops ...私は本当にこの2日目のpython3修正をアップグレードする必要があります:) – shyam

+2

実際には '' 'list(dict.keys())[0]' ''が働いていました。 – raratiru

1

dict.keys()内の任意の意味をなさないであるあなたは、配列を使用することができることを意味し、リストを返します要素にアクセスするインデックス。

def ix(self, dict, n): 
    if len(dict.keys()) > n: 
     return dict.keys()[n] 
    else: 
     //NOT ENOUGH ELEMENTS 
+1

実際には、 '' 'list(dict.keys())[' '' ' – raratiru

-1

これは私が各辞書キーの2番目の値を抽出する方法である:

{key: gaGdT[key][1] for key in parSet} 

gaGdTはタプルとして格納された値を持つソース辞書です。 parSetは一意の辞書キーのセットです。

関連する問題