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
不会有任何影响,因为我们正在比较数字