Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表和词典列表中搜索值_Python_Python 3.x_List_Dictionary - Fatal编程技术网

Python 在列表和词典列表中搜索值

Python 在列表和词典列表中搜索值,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我试图编写一个代码,检查包含字典和/或列表的列表中是否存在特定值,并返回True或False 注意:我无法更改数据的结构 我设法拥有此功能,该功能为我拥有的当前数据类型执行任务: def search_value_list_dic(value, list_dic): if any(isinstance(el, list) for el in list_dic): number_lists = len(list_dic) list_or = []

我试图编写一个代码,检查包含字典和/或列表的列表中是否存在特定值,并返回True或False

注意:我无法更改数据的结构

我设法拥有此功能,该功能为我拥有的当前数据类型执行任务:

def search_value_list_dic(value, list_dic):

    if any(isinstance(el, list) for el in list_dic):
        number_lists = len(list_dic)
        list_or = []
        for i in range(number_lists):            
            if value in list_dic[i]:  
                list_or.append('true')
            else:
                  list_or.append('false')
    
        if 'true' in list_or: return True
        else: return False
    
    
    if value in list_dic:
         return True
    if value not in list_dic:
         return False
我知道这不是最有效的方法。 有人对如何改进有什么想法吗

我还想让它更通用,基本上是搜索列表上的每个项目,即使它有列表上的列表,等等

数据结构示例:


[{'id': 'BuMnLoadRequestCfgBufferRequestOnHysteresis', 'view_id': 122, 'label': {'key': 'BUMN_LOAD_REQUEST_CFGBUFFERREQUESTONHYSTERESIS', 'en': 'Hysteresis to start buffer cylinder loading', 'de': 'Einschalthysterese Puffer'}, 'range': None, 'testing_conditions': [[{'ordName': 'BuMnLoadRequestMnIsActive', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.mnIsActive.1 == true', 'condition_testing': 'BuMn.load.request.mnIsActive.1 == 1'}, 'OR', {'ordName': 'BuMnLoadHydMnIsFlowControlActive', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.hyd.mnIsFlowControlActive.1 == true', 'condition_testing': 'BuMn.load.hyd.mnIsFlowControlActive.1 == 1'}], {'ordName': 'BuMnLoadRequestInAHSHydraulic', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.inAHSHydraulic.4 == BUFFER', 'condition_testing': 'BuMn.load.request.inAHSHydraulic.4 == 1'}], 'type': 'customkeypadonly_text_linear', 'user_level': 3}, {'id': 'BuMnLoadRequestCfgBufferRequestOffHysteresis', 'view_id': 122, 'label': {'key': 'BUMN_LOAD_REQUEST_CFGBUFFERREQUESTOFFHYSTERESIS', 'en': 'Hysteresis to stop buffer cylinder loading', 'de': 'Ausschalthysterese Puffer'}, 'range': None, 'testing_conditions': [[{'ordName': 'BuMnLoadRequestMnIsActive', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.mnIsActive.1 == true', 'condition_testing': 'BuMn.load.request.mnIsActive.1 == 1'}, 'OR', {'ordName': 'BuMnLoadHydMnIsFlowControlActive', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.hyd.mnIsFlowControlActive.1 == true', 'condition_testing': 'BuMn.load.hyd.mnIsFlowControlActive.1 == 1'}], {'ordName': 'BuMnLoadRequestInAHSHydraulic', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.inAHSHydraulic.4 == BUFFER', 'condition_testing': 'BuMn.load.request.inAHSHydraulic.4 == 1'}], 'type': 'customkeypadonly_text_linear', 'user_level': 3}, {'id': 'BuMnLoadRequestCfgBufferAHSOffset', 'view_id': 122, 'label': {'key': 'BUMN_LOAD_REQUEST_CFGBUFFERAHSOFFSET', 'en': 'Buffer to heat source set temperature increase', 'de': 'Temperaturanhebung Puffer zu Mischer/Wärmeerzeuger'}, 'range': None, 'testing_conditions': [{'ordName': 'BuMnLoadRequestMnIsActive', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.mnIsActive.1 == true', 'condition_testing': 'BuMn.load.request.mnIsActive.1 == 1'}, {'ordName': 'BuMnLoadRequestInAHSHydraulic', 'ordValue': '1', 'type': 'single', 'condition': 'BuMn.load.request.inAHSHydraulic.4 == BUFFER', 'condition_testing': 'BuMn.load.request.inAHSHydraulic.4 == 1'}], 'type': 'customkeypadonly_text_linear', 'user_level': 2}]
以及我要搜索的值:或


谢谢这里我实现了一个简单的函数containsx,如果x中某处包含val,则返回True,否则返回False。该函数递归调用自身,在任何深度的所有子结构中进行搜索

在字典内搜索时,我只搜索内部值。要同时搜索内部键,请将代码containsv、val替换为containsv、val或containsk、val

接下来的代码从这个函数开始,然后您的示例x数据结构如下,我将其重新格式化为漂亮的,在代码的末尾有一些测试


您必须递归搜索。像这样的

从输入任何 数据=[ { id:BUMNLOADREQUESTCFGBUFFERREQUESTONHISERE, 视图id:122, 标签:{ 关键字:BUMN\u LOAD\u REQUEST\u CFGBufferrequestOnSystem, en:开始缓冲气缸加载的滞后, de:Einschalthysterese Puffer, }, 范围:无, 测试条件:[ [ { ordName:BumnoAdrenquesTmnisActive, 价值:1, 类型:单, 条件:BuMn.load.request.mnIsActive.1==true, 条件_测试:BuMn.load.request.mnIsActive.1==1, }, 或 { ordName:bumnoladhydmnisflowcontrolactive, 价值:1, 类型:单, 条件:燃烧负荷液压流量控制激活。1==真, 条件测试:燃烧负荷液压流量控制激活。1==1, }, ], { 订单名称:Bumnolandrenquestinahshraulic, 价值:1, 类型:单, 条件:BuMn.load.request.inAHSHydraulic.4==缓冲区, 条件_测试:燃烧负荷请求inAHSHydraulic.4==1, }, ], 类型:customkeypadonly\u text\u linear, 用户级别:3, }, { id:BUMNLOADREQUESTCFGBUFFERREQUESTOFF滞后, 视图id:122, 标签:{ 键:BUMN\u LOAD\u REQUEST\u CFGBufferRequestOff滞后, en:停止缓冲油缸加载的滞后, 德:奥斯沙尔塔斯泰雷斯·帕弗, }, 范围:无, 测试条件:[ [ { ordName:BumnoAdrenquesTmnisActive, 价值:1, 类型:单, 条件:BuMn.load.request.mnIsActive.1==true, 条件_测试:BuMn.load.request.mnIsActive.1==1, }, 或 { ordName:bumnoladhydmnisflowcontrolactive, 价值:1, 类型:单, 条件:燃烧负荷液压流量控制激活。1==真, 条件测试:燃烧负荷液压流量控制激活。1==1, }, ], { 订单名称:Bumnolandrenquestinahshraulic, 价值:1, 类型:单, 条件:BuMn.load.request.inAHSHydraulic.4==缓冲区, 条件_测试:燃烧负荷请求inAHSHydraulic.4==1, }, ], 类型:customkeypadonly\u text\u linear, 用户级别:3, }, { id:BuMnLoadRequestCfgBufferAHSOffset, 视图id:122, 标签:{ 键:BUMN\u加载请求\u CFGBUFFERAHSOFFSET, en:缓冲区至热源设定温度升高, 德:温度河豚, }, 范围:无, 测试条件:[ { ordName:BumnoAdrenquesTmnisActive, 价值:1, 类型:单, 条件:BuMn.load.request.mnIsActive.1==true, 条件_测试:BuMn.load.request.mnIsActive.1==1, }, { 订单名称:Bumnolandrenquestinahshraulic, 价值:1, 类型:单, 条件:BuMn.load.request.inAHSHydraulic.4==缓冲区, 康迪特 ion_测试:BuMn.load.request.inAHSHydraulic.4==1, }, ], 类型:customkeypadonly\u text\u linear, 用户级别:2, }, ] def searchobj:Any,string_to_find:str->bool: 递归搜索对象以查找特定字符串。 Args: obj Any:要分析的对象 string_to_find str:要查找的字符串 返回: 布尔:是否找到字符串 将字典视为值列表 如果是安装对象,请说明: obj=列表obj.values 递归列表中的每个元素 如果isinstanceobj、列表、元组: 对于obj中的元素: 如果element==string\u to\u find或searchelement,string\u to\u find: 返回真值 默认情况下找不到 返回错误 found=搜索数据,bumnoadrequestinahshydraulic 找到printfString“bumnoladrequestinahshydraulic:{found} found=搜索数据,或 printfString'或'found:{found} found=搜索数据,MYRANDOMSTRING 找到printfString“MYRANDOMSTRING:{found} 输出:

找到字符串“bumnoadrequestinahshydraulic”:True 找到字符串“或”:True 找到字符串“MYRANDOMSTRING”:False
请提供一些样本数据,以便我们自己尝试。此外,如果您处理的是字典,那么您要查找的值应该是键、值或其中的任何一个。您应该转到代码检查,而不是堆栈溢出以进行代码优化。@sunnytown是的,对不起,我已经更新了问题,并提供了我正在使用的数据结构示例。我要搜索的值是:或。@Mathieu抱歉不知道,下次我会这样做:@Ricky我在中实现了我自己的搜索函数变体,请看一看!这是超干净的,正是我想要的!非常感谢你,真的很喜欢你的方式!谢谢,这很好用!真的很有帮助!我得到的两个答案都令人惊讶。@Ricky欢迎!:
def contains(x, val):
    if isinstance(x, list):
        for e in x:
            if contains(e, val):
                return True
    elif isinstance(x, dict):
        for k, v in x.items():
            if contains(v, val):
                return True
    elif x == val:
        return True
    return False

x = [
    {
        "id": "BuMnLoadRequestCfgBufferRequestOnHysteresis",
        "view_id": 122,
        "label": {
            "key": "BUMN_LOAD_REQUEST_CFGBUFFERREQUESTONHYSTERESIS",
            "en": "Hysteresis to start buffer cylinder loading",
            "de": "Einschalthysterese Puffer",
        },
        "range": None,
        "testing_conditions": [
            [
                {
                    "ordName": "BuMnLoadRequestMnIsActive",
                    "ordValue": "1",
                    "type": "single",
                    "condition": "BuMn.load.request.mnIsActive.1 == true",
                    "condition_testing": "BuMn.load.request.mnIsActive.1 == 1",
                },
                "OR",
                {
                    "ordName": "BuMnLoadHydMnIsFlowControlActive",
                    "ordValue": "1",
                    "type": "single",
                    "condition": "BuMn.load.hyd.mnIsFlowControlActive.1 == true",
                    "condition_testing": "BuMn.load.hyd.mnIsFlowControlActive.1 == 1",
                },
            ],
            {
                "ordName": "BuMnLoadRequestInAHSHydraulic",
                "ordValue": "1",
                "type": "single",
                "condition": "BuMn.load.request.inAHSHydraulic.4 == BUFFER",
                "condition_testing": "BuMn.load.request.inAHSHydraulic.4 == 1",
            },
        ],
        "type": "customkeypadonly_text_linear",
        "user_level": 3,
    },
    {
        "id": "BuMnLoadRequestCfgBufferRequestOffHysteresis",
        "view_id": 122,
        "label": {
            "key": "BUMN_LOAD_REQUEST_CFGBUFFERREQUESTOFFHYSTERESIS",
            "en": "Hysteresis to stop buffer cylinder loading",
            "de": "Ausschalthysterese Puffer",
        },
        "range": None,
        "testing_conditions": [
            [
                {
                    "ordName": "BuMnLoadRequestMnIsActive",
                    "ordValue": "1",
                    "type": "single",
                    "condition": "BuMn.load.request.mnIsActive.1 == true",
                    "condition_testing": "BuMn.load.request.mnIsActive.1 == 1",
                },
                "OR",
                {
                    "ordName": "BuMnLoadHydMnIsFlowControlActive",
                    "ordValue": "1",
                    "type": "single",
                    "condition": "BuMn.load.hyd.mnIsFlowControlActive.1 == true",
                    "condition_testing": "BuMn.load.hyd.mnIsFlowControlActive.1 == 1",
                },
            ],
            {
                "ordName": "BuMnLoadRequestInAHSHydraulic",
                "ordValue": "1",
                "type": "single",
                "condition": "BuMn.load.request.inAHSHydraulic.4 == BUFFER",
                "condition_testing": "BuMn.load.request.inAHSHydraulic.4 == 1",
            },
        ],
        "type": "customkeypadonly_text_linear",
        "user_level": 3,
    },
    {
        "id": "BuMnLoadRequestCfgBufferAHSOffset",
        "view_id": 122,
        "label": {
            "key": "BUMN_LOAD_REQUEST_CFGBUFFERAHSOFFSET",
            "en": "Buffer to heat source set temperature increase",
            "de": "Temperaturanhebung Puffer zu Mischer/Wärmeerzeuger",
        },
        "range": None,
        "testing_conditions": [
            {
                "ordName": "BuMnLoadRequestMnIsActive",
                "ordValue": "1",
                "type": "single",
                "condition": "BuMn.load.request.mnIsActive.1 == true",
                "condition_testing": "BuMn.load.request.mnIsActive.1 == 1",
            },
            {
                "ordName": "BuMnLoadRequestInAHSHydraulic",
                "ordValue": "1",
                "type": "single",
                "condition": "BuMn.load.request.inAHSHydraulic.4 == BUFFER",
                "condition_testing": "BuMn.load.request.inAHSHydraulic.4 == 1",
            },
        ],
        "type": "customkeypadonly_text_linear",
        "user_level": 2,
    },
]

assert contains(x, 'OR')
assert contains(x, 'BuMnLoadRequestMnIsActive')
assert not contains(x, 'AND')