Python 将坐标表示转换为邻接列表表示
转换此文件最有效的方法是什么:Python 将坐标表示转换为邻接列表表示,python,graph,awk,Python,Graph,Awk,转换此文件最有效的方法是什么: 10 3 10 5 12 6 12 19 19 12 19 14 19 10 为此: 10 3 5 12 6 19 19 12 14 10 输入文件的第一列按递增顺序进行数字排序 欢迎使用Python、AWK等的任何解决方案 from itertools import groupby lines, op_file = [line.split() for line in open("In.txt")], open("Out.txt", "w") for ke
10 3
10 5
12 6
12 19
19 12
19 14
19 10
为此:
10 3 5
12 6 19
19 12 14 10
输入文件的第一列按递增顺序进行数字排序
欢迎使用Python、AWK等的任何解决方案
from itertools import groupby
lines, op_file = [line.split() for line in open("In.txt")], open("Out.txt", "w")
for key, grp in groupby(lines, key = lambda x: x[0]):
print >> op_file, "{} {}".format(key, " ".join([i[1] for i in grp]))
op_file.close()
输出
10 3 5
12 6 19
19 12 14 10
在Python 2中:
import itertools, operator
with open(infilename) as infile:
input = (line.split() for line in infile)
output = itertools.groupby(input, operator.itemgetter(0))
with open(outfilename, 'w') as outfile:
for key, line in output:
print >>outfile, key, ' '.join(val[1] for val in line)
这假设输入和输出文件是不同的:您只需将输出写入standard out,并将其作为用户的问题保存即可。尝试此代码
fp = open('/tmp/test.txt')
list_dict = {}
for line in fp.readlines():
split_values = line.split()
if split_values[0] in list_dict:
list_dict[split_values[0]].extend(split_values[1:])
else:
list_dict[split_values[0]] = split_values
for val in list_dict.values():
print " ".join(val)
既然你提到awk:
$ awk '{a[$1]=a[$1]" "$2}END{for (i in a){print i a[i]}}' input
19 12 14 10
10 3 5
12 6 19
将其输送到sort
进行排序:
$ awk '...' input | sort
10 3 5
12 6 19
19 12 14 10
+1,哎呀,石头!不过,排序需要一个
-n
,对吗?-n
不会有任何影响,因为我们正在比较数字