我有一个JSON文件,我试图使用值(而不是键)进行搜索。 Python中有内置函数吗?
[["2778074170846781111111110", "a33104eb1987bec2519fe051d1e7bd0b4c9e4875"],
["2778074170846781111111111", "f307fb3db3380bfd27901bc591eb025398b0db66"]]
我想到了这种方法。将文件加载到列表中并开始搜索。有更有效的方法吗?
def OptionLookUp(keyvalue):
with open('data.json', 'r') as table:
x= json.loads(table)
答案 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)
这个第二个解决方案只有在同一个数据集上有大量的查找才有意义,显然......