2024-10-06 12:16:01 发布
网友
我有一个包含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
我要做的是比较第5列,找出任何值的重复性,然后生成一个包含两整行的outfile。在
使用str.split()拆分行
str.split()
使用collections.defaultdict(list)来跟踪重复
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']])]
下面是另一种使用setdefault(即,您不必导入collections:
setdefault
collections
>>> 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', ... 'PAIR AB32 4 KRYPONITE 98 ARSENIC 99 2.3406' ... ] >>> d = {} >>> for line in lines: ... d.setdefault(line.split()[4], []).append(line) ... >>> [(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']), ('98', ['PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003', 'PAIR B32 4 KRYPONITE 98 ARSENIC 99 2.3406'])]
使用
str.split()
拆分行使用
collections.defaultdict(list)
来跟踪重复例如
下面是另一种使用
setdefault
(即,您不必导入collections
:相关问题 更多 >
编程相关推荐