在嵌套字典列表中搜索值

时间:2020-06-10 14:59:22

标签: python dictionary

我想对嵌套字典列表中的值进行搜索,然后返回另一个键:值对。这些词典是图元文件。基本上,我想搜索每个字典的ID,找到具有相同ID的所有字典,然后返回文件位置(键:值)对。

metafile = [{'metadata':{'Title':'The Sun Also Rises', 'ID': 'BAY121-F1164EAB499'}, 'content': 'xyz', 'File_Path': 'file_location1'},
{'metadata':{'Title':'Of Mice and Men', 'ID': '499B0BAB@dfg'}, 'content': 'abc', 'File_Path': 'file_location2'},
{'metadata':{'Title':'The Sun Also Rises Review', 'ID': 'BAY121-F1164EAB499'}, 'content': 'ftw', 'File_Path': 'file_location3'}]

我创建了一个循环来执行搜索,如下所示。虽然它返回一个空列表,但我应该如何修改它以便返回文件路径?

search_ID = 'BAY121-F1164EAB499'
path =[]
for a in metafile:
    for val in a['metadata']['ID']:
        if search_ID == val:
            path.append(a['File_Path'])

2 个答案:

答案 0 :(得分:1)

您不需要为此的内部循环:

正确的代码

search_ID = 'BAY121-F1164EAB499'
path =[]
for a in metafile:
    #a['metadata']['ID'] already gives you the value of ID
    if search_ID == a['metadata']['ID']:
        path.append(a['File_Path'])

输出

['file_location1', 'file_location3']

答案 1 :(得分:0)

您不需要遍历a['metadata']['ID'],只需直接访问它们即可。因此修改后的代码将是

    metafile = [{'metadata':{'Title':'The Sun Also Rises', 'ID': 'BAY121- 
    F1164EAB499'}, 'content': 'xyz', 'File_Path': 'file_location1'},
    {'metadata':{'Title':'Of Mice and Men', 'ID': '499B0BAB@dfg'}, 'content': 'abc', 
    'File_Path': 'file_location2'},
    {'metadata':{'Title':'The Sun Also Rises Review', 'ID': 'BAY121-F1164EAB499'}, 
    'content': 'ftw', 'File_Path': 'file_location3'}]

     search_ID = 'BAY121-F1164EAB499'
     path =[]
     for a in metafile:
         if a["metadata"]["ID"] == search_ID:
            path.append(a['File_Path'])