首页 > 解决方案 > 在列表中查找特定项目的所有实例

问题描述

假设我有这个列表,其中很少有项目出现一次以上(项目可能是列表中的列表或字典。

list_1 = ['@BOOLOP : and', '@SEQ : 0', '@TYPE : 0', "BOOLOP : [{'@BOOLOP': 'or', '@SEQ': '1', '@TYPE': '0', 'FRAGMENT': [{'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PB:SALES_TYPE', '@PROP2': 'PURCHASE', '@SEQ': '1', '@TYPE': '1'}, {'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PB:SALES_TYPE', '@PROP2': 'LEASE', '@SEQ': '2', '@TYPE': '1'}]}, {'@BOOLOP': 'or', '@SEQ': '2', '@TYPE': '0', 'FRAGMENT': {'@FUNC1': 'value', '@FUNC2': 'list', '@NULLACTION': 'Fragment is false', '@OP': 'in', '@PROP1': 'PB:PRICELIST', '@PROP2': 'LeaseAccountingContracts', '@SEQ': '1', '@TYPE': '1'}}, {'@BOOLOP': 'or', '@SEQ': '4', '@TYPE': '0', 'FRAGMENT': [{'@FUNC1': 'value', '@FUNC2': 'propval', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PICK_SKU1', '@PROP2': '._sku', '@SEQ': '1', '@TYPE': '1'}, {'@FUNC1': 'value', '@FUNC2': 'propval', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PICK_SKU10', '@PROP2': '._sku', '@SEQ': '2', '@TYPE': '1'}]}]"]

该项目的出现类型可能会有所不同,就像有时它可能在类型列表或字典中一样。

 list_2 = ['@BOOLOP : and', '@SEQ : 0', '@TYPE : 0', {'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': '_sku', '@PROP2': 'ZHD8', '@SEQ': '1', '@TYPE': '1'}]

我想要实现的是获得所有@BOOLOP:and@BOOLOP:or层次结构。就像在它list_1的里面一样。可能存在@BOOLOP @BOOLOP`的情况@BOOLOP:andor@BOOLOP inside of aor just two separate

list_3 = ['@BOOLOP : and', '@SEQ : 0', '@TYPE : 0', "FRAGMENT : [{'@FUNC1': 'propval', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': '_amEntitled', '@PROP2': '1', '@SEQ': '1', '@TYPE': '1'}, {'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'IsShipingSelected', '@PROP2': 'yes', '@SEQ': '2', '@TYPE': '1'}, {'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PB:BaseSystemSelected', '@PROP2': 'yes', '@SEQ': '3', '@TYPE': '1'}]", {'@BOOLOP': 'or', '@SEQ': '4', '@TYPE': '0', 'FRAGMENT': [{'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PB:SALES_TYPE', '@PROP2': 'PURCHASE', '@SEQ': '1', '@TYPE': '1'}, {'@FUNC1': 'value', '@FUNC2': 'literal', '@NULLACTION': 'Fragment is false', '@OP': '=', '@PROP1': 'PB:SALES_TYPE', '@PROP2': 'LEASE', '@SEQ': '2', '@TYPE': '1'}]}]

获取它们和层次结构的全部意义在于我需要对与相应的@BOOLOP. 让我们说一个条件中有 2 个或可能是三个FRAGMENT项目,一个@BOOLOP:or条件中有 1 个@BOOLOP:and。我需要检查是否AND OR有意义才能继续前进。

我首先从 XML 中提取此信息(转换为 json,因为我在解析它时遇到了一些困难),然后将其转换为 JSON,然后从中提取有用的信息。我无法弄清楚从这里去哪里。任何帮助表示赞赏。

这是我获取这些列表的示例代码。如果您想要整个 JSON,请询问。但我觉得这会给你基本的想法。

def getRuleProp(json_rule_data):
    target_rules = getTargetPickRules(json_rule_data)
    for x,y in target_rules.items():
        print(y)  # prints the sample lists I have posted

我试图以图像格式获取所有可能的场景: 设想

标签: pythonjsonpython-3.x

解决方案


推荐阅读