Python用键值搜索Json

时间:2016-11-21 15:05:39

标签: python json search

我有一个JSON文件,我试图使用值(而不是键)进行搜索。 Python中有内置函数吗?

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

我想到了这种方法。将文件加载到列表中并开始搜索。有更有效的方法吗?

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

3 个答案:

答案 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')]

答案 1 :(得分:1)

编辑之后,我可以说没有比将JSON转换为python二维列表并循环遍历每个节点并将第二个字段与“keyvalue”进行比较的更快/更有效的方法。

编辑:更快/更有效

答案 2 :(得分: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)

这个第二个解决方案只有在同一个数据集上有大量的查找才有意义,显然......