【问题标题】:traverse backwards, return the outer dictionary value in case match found in inner dictionary for search value向后遍历,如果在内部字典中找到匹配的搜索值,则返回外部字典值
【发布时间】:2019-07-09 06:57:21
【问题描述】:

我有一个字典列表,其中值包含另一个字典,我需要在内部字典中搜索一个字符串,如果它的匹配项需要返回外部字典第一个键的值。

列表如下:

lst=[{'value': 'value1', 'Characteristic': {'ID': 'searchstr1'}},
     {'value': 'value2', 'Characteristic': {'ID': 'searchstr2'}}, 
     {'value': 'value3', 'Characteristic': {'ID': 'searchstr3'}}
     , {'value': 'value4', 'Characteristic': {'ID': 'searchstr4'}}]

搜索字符串是

search_str="searchstr3"

所以在这种情况下它应该返回

value3 as result . 

我尝试循环遍历列表,然后获取每个字典项,但不确定一旦找到所需的值如何返回。

这是我到目前为止厌倦的代码:

def find_value():
    for dicts in lst:
        current = dicts["value"]
        for k,v in dicts.items():
            #print("{0} : {1}".format(k, v))        
            if isinstance(v, dict):                
                if v['ID']==search_str:
                    break 
        return current

【问题讨论】:

  • for dicts in lst: current = dicts["value"]?
  • dict 是无序结构 - 您可以将匹配字符串的键作为第一个键

标签: python dictionary


【解决方案1】:

在您的简单情况下,它不是关于第一个键,而是一个特定键 'value' - 只需立即返回所需的值:

lst = [{'value': 'value1', 'Characteristic': {'ID': 'searchstr1'}},
     {'value': 'value2', 'Characteristic': {'ID': 'searchstr2'}},
     {'value': 'value3', 'Characteristic': {'ID': 'searchstr3'}},
     {'value': 'value4', 'Characteristic': {'ID': 'searchstr4'}}]
search_str = "searchstr3"

def find_value(lst, search_str):
    for d in lst:
        for k,v in d.items():
            if isinstance(v, dict) and v['ID'] == search_str:
                return d['value']
    return None

print(find_value(lst, search_str))   # value3

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2012-07-15
    • 2015-08-07
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多