2016-11-21 2 views
1

私はJSONファイルを持っていますが、キーではなく値を使って検索しようとしています。 Pythonに組み込まれている関数はありますか?Pythonがキー値でJsonを検索する

[["2778074170846781111111110", "a33104eb1987bec2519fe051d1e7bd0b4c9e4875"], 
    ["2778074170846781111111111", "f307fb3db3380bfd27901bc591eb025398b0db66"]] 

私はこのアプローチを考えました。ファイルをリストにロードして検索を開始する。より効率的な方法がありますか?

def OptionLookUp(keyvalue): 
    with open('data.json', 'r') as table: 
     x= json.loads(table) 
+0

これは通常の2次元リスト(辞書ではない)なので、キーだけの値は持たない。そして、あなたは何を探したいのですか? for-loopを使用してすべての行をチェックします。 – furas

+0

furasは2次元リスト(python)であるとか、JSONについて話すときは2次元配列であると言います。これはキー値JSONです:{'key': 'value'}。 furasが尋ねるように、関数を渡している "keyvalue"の例は何ですか? –

+0

Tureしかし、それでも有効なJSONです。 ここで確認できます http://jsonlint.com/ –

答えて

0

あなたの編集後、私のpython 2 - にあなたのJSONを回すよりも速く/より効率的な方法がないことを言うことができます各ノードをループし、2番目のフィールドと "keyvalue"を比較します。

EDIT:速い/より効率的な

+0

ありがとうございました!それは私が知りたかったものです:) –

1
your_dict = {'a': 1, 'b': 2, 'c': 'asd'} # the dictionary 
your_value = 'asd' # the value to look for 
[elem for elem in your_dict.iteritems() if elem[1] == 'asd'] # look for entry with value == your_value 
Output: [('c', 'asd')] 

EDIT:リスト用

your_list = [['a', 1], ['b', 2], ['c', 'asd']] # the list 
your_value = 'asd' # the value to look for 
[elem for elem in your_list if elem[1] == 'asd'] # look for element with value == your_value 
Output: [('c', 'asd')] 
+0

opのデータはリストであり、dictではありません。 –

+0

あなたが正しいです、私は答えを編集しました。おかげで –

0

私はあなたが与えられた値に関連付けられたキー(またはキー)を探していると仮定します。

データが(キー、値)ペアのリストであることが保証されている場合、データのボリュームと同じデータセットで実行する必要があるルックアップの数に応じて、平野順次検索:

def slookup(lst, value): 
    return [k for k, v in lst if v == value] 

または逆インデックスを構築は、インデックスを検索:

import defaultdict 
def index(lst): 
    d = defaultdict(list) 
    for k, v in lst: 
     d[v].append(k) 
    return d 

rindex = index(lst) 
print rindex.get(someval) 
print rindex.get(someotherval) 

あなたは明らかに、同じデータセットに対して実行する検索の多くを持っている場合は、この第二の溶液にのみ意味があります。 ..

関連する問題