【问题标题】:Filtering two lists of objects with same props in Python在 Python 中过滤两个具有相同道具的对象列表
【发布时间】:2021-06-16 10:02:23
【问题描述】:

我有两个对象列表:

1 - list_one

[{'name': 'Jhon', 'OS': 'Android', 'impact': '1'},
 {'name': 'Jhon', 'OS': 'Iphone', 'impact': '1'},
 {'name': 'Roger', 'OS': 'Android', 'impact': '1'},
 {'name': 'Clev', 'OS': 'Android', 'impact': '2'}]

2 - list_two

[{'name': 'Jhon', 'OS': 'Android', 'impact': '3'},
 {'name': 'Roger', 'OS': 'Android', 'impact': '3'}]

我只需要一个列表,删除两个列表中 name 和 OS 相等的对象,然后是 最终列表会是这样的:

[{'name': 'Jhon', 'OS': 'Iphone', 'impact': '1'},
 {'name': 'Clev', 'OS': 'Android', 'impact': '2'}]

【问题讨论】:

  • 假设“数字”是“影响”,我看不出这些列表之间有任何关联
  • 数字是指操作系统吗?
  • 我看不出你的问题有什么逻辑。

标签: python arrays list object


【解决方案1】:

您只想检查“名称”和“操作系统”,因此,首先,将包含项目的辅助列表减少到仅这两个键。接下来,对于这两个列表,整理出在另一个列表中具有等价物的那些项目。

list1 = [{'name': 'Jhon', 'OS': 'Android', 'impact': '1'},
         {'name': 'Jhon', 'OS': 'Iphone', 'impact': '1'},
         {'name': 'Roger', 'OS': 'Android', 'impact': '1'},
         {'name': 'Clev', 'OS': 'Android', 'impact': '2'}]
list2 = [{'name': 'Jhon', 'OS': 'Android', 'impact': '3'},
         {'name': 'Roger', 'OS': 'Android', 'impact': '3'}]
list1_aux = [{'name': item['name'], 'OS': item['OS']} for item in list1]
list2_aux = [{'name': item['name'], 'OS': item['OS']} for item in list2]

res = [item for item in list1 if {'name': item['name'], 'OS': item['OS']} not in list2_aux]
res += [item for item in list2 if {'name': item['name'], 'OS': item['OS']} not in list1_aux]
res

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多