让我们说我有这个列表,其中很少有项目出现一次以上(项目可能是列表中的,也可能是列表中的字典。
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:and
的侧面有or
。有时可能会有@BOOLOP inside of a
@ BOOLOP or just two separate
@ BOOLOP`
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
关联的Fragment标签执行一些操作。让我们说,在FRAGMENT
条件下有2个或可能有三个@BOOLOP:or
项目,在@BOOLOP:and
条件下有1个项目。我需要检查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