[英]How to sort the output of difference between two sets using python
我有两组a
和b
,我正在打印这两组之间的差异,如下所示。 我面临的问题是 output 没有按照actual output
所示的排序方式出现。 我需要 output 以这样的方式,即两个文件中存在差异的行应该彼此之后,如expected output
所示。
a = {
'Jane Lee|248 Another St.|Boston|US|02130|4535353535.35353535353',
'Jim Smth|123 Any Street|Boston|US|02134',
'Name|Address|City|Country|Pinode'
}
b = {
'Jane Lee|248 Another St.|Boston|US|02130|4535353535.3535355353',
'Jim Smith|123 Any Stret|Boston|US|02134',
'Name|Address|Cty|Country|Pincode'
}
res_dict = defaultdict(list)
diff = ([('ua.csv,' + i) if i in a else ('pr.csv,' + i) if i in b else ''
for i in list(a ^ b)])
if diff == []:
print('Great!!! There are no differences')
else:
print('\n'.join(diff))
实际 output
ua.csv,Name|Address|City|Country|Pinode
ua.csv,Jane Lee|248 Another St.|Boston|US|02130|4535353535.35353535353
pr.csv,Name|Address|Cty|Country|Pincode
pr.csv,Jim Smith|123 Any Stret|Boston|US|02134
pr.csv,Jane Lee|248 Another St.|Boston|US|02130|4535353535.3535355353
ua.csv,Jim Smth|123 Any Street|Boston|US|02134
预期的 output:需要 output,这样两个文件中存在差异的行应该像下面这样在彼此之后
ua.csv,Name|Address|City|Country|Pinode
pr.csv,Name|Address|Cty|Country|Pincode
ua.csv,Jane Lee|248 Another St.|Boston|US|02130|4535353535.35353535353
pr.csv,Jane Lee|248 Another St.|Boston|US|02130|4535353535.3535355353
pr.csv,Jim Smith|123 Any Stret|Boston|US|02134
ua.csv,Jim Smth|123 Any Street|Boston|US|02134
在 Python 中,集合是无序的。 它们不存储关于哪个元素是第一个、第二个等的信息。您可以将其想象成一堆水果 - 您无法分辨哪个水果在哪个 position 中,您只能说是否有香蕉或比较堆用另一个堆检查它们是否包含不同的水果。
出于这个原因,使用集合的实现将不起作用,您将不得不使用一些有序的结构,以保存有关其元素顺序的信息(例如列表)。
这是假设列表是有序的,并且每个索引与不同列表中的相同引用相关
首先,zip 将列表放在一起,因此相应的元素被分组为一个元组
然后,根据分组元组何时不同创建一个新列表
a = {
'Jane Lee|248 Another St.|Boston|US|02130|4535353535.35353535353',
'Jim Smth|123 Any Street|Boston|US|02134',
'Name|Address|City|Country|Pinode'
}
b = {
'Jane Lee|248 Another St.|Boston|US|02130|4535353535.3535355353',
'Jim Smith|123 Any Stret|Boston|US|02134',
'Name|Address|Cty|Country|Pincode'
}
z = list(zip(a, b))
diff = [ (f'us.cav: {aLine}', f'pr.csv: {bLine}') for aLine, bLine in z if aLine != bLine]
if diff == []:
print('Great!!! There are no differences')
else:
for d in diff:
print(f'{d[0]}\n{d[1]}\n\n)
output:
us.cav: Name|Address|City|Country|Pinode
pr.csv: Name|Address|Cty|Country|Pincode
us.cav: Jane Lee|248 Another St.|Boston|US|02130|4535353535.35353535353
pr.csv: Jane Lee|248 Another St.|Boston|US|02130|4535353535.3535355353
us.cav: Jim Smth|123 Any Street|Boston|US|02134
pr.csv: Jim Smith|123 Any Stret|Boston|US|02134
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.