2016-11-21 127 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

這是普通的二維列表(不是字典),所以你沒有鍵 - 只有值。你想找什麼?使用for-loop來檢查每一行。 – furas

+0

正如furas所說,它是二維列表(python),或者當談論JSON時,它是二維數組。這是鍵值JSON:{'key':'value'}。正如furas所問,你通過函數的「keyvalue」的例子是什麼? –

+0

Ture,但它仍然是一個有效的JSON。 您可以點擊這裏查看 http://jsonlint.com/ –

回答

0

您的編輯後,我可以說,沒有更快/比把你的JSON轉換成蟒蛇2-更有效的方法二維列表並循環遍歷每個節點,並將第二個字段與「keyvalue」進行比較。

編輯:更快/更有效

+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')] 

編輯:

的列表:

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的數據是列表的列表,而不是字典。 –

+0

你說得對,我編輯了答案。謝謝 –

0

我假設你正在尋找與給定值相關聯的鍵(或鍵)。

如果您的數據保證成爲(鍵,值)對的列表,具體取決於1 /數據的體積和2 /您必須在同一數據集上執行多少查找,您可以執行普通的順序搜索:

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) 

第二方案纔有意義,如果你有很多的查詢做對同一數據集,很明顯。 ..