PYTHON列表搜索值重复

dif*_*teD -1 python

我有一个包含8列和100多行的文件,如下所示:

PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506  
Run Code Online (Sandbox Code Playgroud)

我想要做的是比较第5列以找出任何值的重复,然后生成包含两个完整行的outfile.

Joh*_*ooy 5

使用str.split()分裂线

使用a collections.defaultdict(list)来跟踪重复

例如.

>>> lines = """PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
... PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
... PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
... PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506  """.split("\n")
>>> 
>>> from collections import defaultdict

>>> D = defaultdict(list)
>>> for line in map(str.split, lines):
...     k = line[4]
...     D[k].append(line)
... 

>>> [v for k,v in D.items() if len(v) > 1]
[[['PAIR', '1MFK', '1', 'URANIUM', '82', 'HELIUM', '112', '3.6997'], ['PAIR', '4IG5', '4', 'LITHIUM', '82', 'ARGON', '99', '2.5506']]]

>>> [(k,v) for k,v in D.items() if len(v) > 1]
[('82', [['PAIR', '1MFK', '1', 'URANIUM', '82', 'HELIUM', '112', '3.6997'], ['PAIR', '4IG5', '4', 'LITHIUM', '82', 'ARGON', '99', '2.5506']])]
Run Code Online (Sandbox Code Playgroud)