繁体   English   中英

Python 获取两个类型列表之间的差异

[英]Python Get Difference Between Two Typed Lists

实际上,我有一个名为“Employee”的类,其中包含以下属性:

class Employee:
    id: int
    name: str
    age: int

此外,我收到了两个列表(来自不同的数据库),每个项目都是一个“员工”实例。 就像是

listA = [{id: 1, name: 'john  doe', age: 20}, {id: 2, name: 'marry', age: 27}]
listB = [{id: 1, name: 'john', age: 20}, {id: 2, name: 'marry', age: 27}]

我如何比较这两个列表并返回与另一个列表的不同之处?

例如:返回一个只包含john doe实例的新列表。

浏览一个列表的所有项目并选择不在另一个列表中的项目,反之亦然:

[item for item in listA if item not in listB] +\
[item for item in listB if item not in listA]
#[{'id': 1, 'name': 'john  doe', 'age': 20}, 
# {'id': 1, 'name': 'john', 'age': 20}]

如果列表很大,您可以通过将它们转换为项目的冻结集并采用对称集差来提高性能:

setA = set(frozenset(l.items()) for l in listA) 
setB = set(frozenset(l.items()) for l in listB)
setA ^ setB
#{frozenset({('id', 1), ('name', 'john'), ('age', 20)}), 
# frozenset({('age', 20), ('id', 1), ('name', 'john  doe')})}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM