2017-12-08 12 views
0

をループせずに値を使用してPythonでオブジェクトのインデックスを取得します。だから、基本的に私はこれ持って

data = [ 
    { 
     "id" : "hello", 
     ... 
    }, 
    { 
     "id" : "world", 
     ... 
    } 
] 

を、私は結果を取得したい:

:私のようなものを入力した場合

"1" 

get_index(id="world") 

そして、主なことは私がでないことですは配列をループしたいですそこにはたくさんのデータがあるからです。ループすると簡単になりますが、私はいくつかのコードで終わるでしょう:

for obj in data: 
    if obj['id'] == 'hello': 
     print(obj['id']) 

しかし、これをループなしで行う方法はありますか?

+0

IDがアルファベット順にソートされている場合は、あなたが二分探索を使用することができます例の単なる偶然ではありません。しかし、一般的には:あなたがあなたのデータの構造に関するいくつかの追加情報を利用することができない限り、これはO(n)の操作になります。 – jonrsharpe

+0

ありがとう。あなたは答えでそれを言うことができますので、私は受け入れられたと言えるでしょうか? data._がたくさんあるので –

+1

さて、この特定のユースケースでは、それが簡単にあなたが_Iを言うのは、ループにしたくないしかし、あなたは実際にあなたが探している情報の正確な位置を知っていますか?おそらくそうではありません。可能な場合は、セットなどの適切なデータ構造を使用して検索を最適化できます。しかし、実際に検索することなくアイテムを検索するソリューションを求めています。これは可能ではありません。 – scharette

答えて

1

より効率的にあなたがいる限りあなたには、いくつかの方法でデータの特定の構造を利用することができないと述べたループよりも、これを行うことはできません。

+0

。私はあなたの答えの付加価値を見ません。特に、POが望んでいたものをどのように達成するかについての洞察を提供していないためです。 – scharette

+0

著者は、直接的な方法があるかどうか尋ねましたが、そうではありません。したがって、私の答えは質問に答えることです... – mrCarnivore

0

あなたは少なくとも一度アレイ全体を通過する必要があります。あなたは今、ルックアップテーブルを持っていたよう

>>> data = [ 
...  { 
...   "id" : "hello", 
...  }, 
...  { 
...   "id" : "world", 
...  } 
... ] 
>>> get_index= {item["id"]:counter for (counter, item) in enumerate(data)} 
>>> get_index["hello"] 
0 
>>> get_index["world"] 
1 
>>> 

は、IDSへのクエリは、現在、一定時間操作する必要があります:あなたは、アレイ内の多くの異なるキーを検索する必要がある場合

しかし、あなたは、インデックスを作成できます。 How expensive are Python dictionaries to handle?

関連する問題