2016-11-21 119 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) 

第二方案才有意义,如果你有很多的查询做对同一数据集,很明显。 ..