首页 > 解决方案 > 如何从有条件的字典列表中提取字典

问题描述

如何从带有条件的json中提取

我有一个字典列表。我需要在某些条件下提取一些字典

  1. 我需要搜索subject这是PhysicsAccounting这是字段数组(OR)语句

  2. 我需要搜索typePermanentGUEST条件这是字段数组(OR)语句

  3. 我需要搜索Location的是NY(&) 条件

test = [{'id':1,'name': 'A','subject': ['Maths','Accounting'],'type':'Contract', 'Location':'NY'},
      { 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'},
    {'id':3,'name': 'ABC','subject': ['Maths','Engineering'],'type':'Permanent','Location':'NY'},
{'id':4,'name':'ABCD','subject': ['Physics','Engineering'],'type':['Contract','Guest'],'Location':'NY'}]

预期出来的是 id[{ 'id':2,'name': 'AB','subject': ['Physics','Engineering'],'type':'Permanent','Location':'NY'},{'id':4,'name':'ABCD','subject': ['Physics','Engineering'],'type':['Contract','Guest'],'Location':'NY'}]

标签: pythondictionary

解决方案


以下带有嵌套 if 子句的简单方法解决了该问题。and条件是通过嵌套完成的,ifor条件只是通过or.

in运算符适用于字符串值和列表值,因此它可以互换使用并产生预期的结果。但是这种方法期望没有特定的主题,例如XYZ Accounting.

result = []

for elem in test:
    
    # Check Location
    if elem['Location'] == 'NY':
    
        # Check subject
        subject = elem['subject']
        if ('Accounting' in subject) or ('Physics' in subject):
        
            # Check type
            elem_type = elem['type']
            if ('Permanent' in elem_type) or ('Guest' in elem_type):
                # Add element to result, because all conditions are true
                result.append(elem)

推荐阅读