繁体   English   中英

如何使用 python 对两组之间差异的 output 进行排序

[英]How to sort the output of difference between two sets using python

我有两组ab ,我正在打印这两组之间的差异,如下所示。 我面临的问题是 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.

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