python - 在列表中查找特定项目的所有实例
问题描述
假设我有这个列表,其中很少有项目出现一次以上(项目可能是列表中的列表或字典。
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:and
or
@BOOLOP inside of a
or 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
解决方案
推荐阅读
- javascript - 如何修复在我的代码中将受控输入更改为不受控的错误?
- java - type 语句中的方法 executeQuery(string) 不适用于 arguments(),我哪里出错了?使用 Eclipse
- python - 如何从 HTML 文件中提取标签并将它们写入新文件?
- android - 如何从屏幕的右到左和从左到右为图像设置动画
- dns - 将 http url 重定向到 https - Godaddy + Google 网站
- python - 转换我的日期列时错误的字符串格式
- c# - ReadOnly AttachedProperty 基于另一个属性
- azure-functions - Azure Grid 中用于 Blob 处理的传递失败事件
- swift - XCFramework“无法加载底层模块”
- swift - 视觉框架条形码检测感兴趣区域不起作用