对哈希表排序并同时打印键值
我写了一个Python程序,使用了哈希表来从一个文件中读取数据,然后根据文件第二列的值,在文件的最后一列添加数据。举个例子,对于第二列中相同的值,最后一列的对应值会被加在一起。
现在我已经成功实现了这个功能。接下来,我想根据最后一列的值将表格按降序排序,并打印这些值以及对应的第二列(键)值。但我不知道该怎么做。有没有人能帮帮我?
我的文本文件格式是这样的:
0.418705 2 3 1985 20 0
0.420657 4 5 119 3849 5
0.430000 2 3 1985 20 500
以此类推...
所以,比如说在第二列的数字2,我已经把所有第二列为'2'的最后一列数据加在一起。这个过程会继续进行,直到处理完第二列中的下一个数字,比如4、5等等。
我使用的是Python 3。
import math
source_ip = {}
f = open("pmt.txt","r",1)
lines = f.readlines()
for line in lines:
s_ip = line.split()[1]
bit_rate = int(line.split()[-1]) + 40
if s_ip in source_ip.keys():
source_ip[s_ip] = source_ip[s_ip] + bit_rate
print (source_ip[s_ip])
else:
source_ip[s_ip] = bit_rate
f.close()
for k in source_ip.keys():
print(str(k)+": "+str(source_ip[k]))
print ("-----------")
2 个回答
0
这样做怎么样呢?
#!/usr/local/cpython-3.4/bin/python
import collections
source_ip = collections.defaultdict(int)
with open("pmt.txt","r",1) as file_:
for line in file_:
fields = line.split()
s_ip = fields[1]
bit_rate = int(fields[-1]) + 40
source_ip[s_ip] += bit_rate
print (source_ip[s_ip])
for key, value in sorted(source_ip.items()):
print('{}: {}'.format(key, value))
print ("-----------")
2
听起来你想用 sorted
函数,并且想通过 key
参数来获取键值对中的值:
sorted_items = sorted(source_ip.items(), key=lambda x: x[1])
你也可以使用 operator
模块里的 itemgetter
,而不是用一个 lambda 函数:
import operator
sorted_items = sorted(source_ip.items(), key=operator.itemgetter(1))