对哈希表进行排序并同时打印键和值

时间:2014-04-17 23:08:42

标签: python sorting hashtable

我在python中编写了一个程序,我在其中使用哈希表从文件中读取数据,然后在文件的最后一列中添加与文件第2列中的值对应的数据。例如,对于第2列中具有相同值的所有条目,将添加相应的最后列值。

现在我已成功实施了上述内容。现在我想根据最后一列值按降序对表进行排序,并打印这些值和相应的第二列(键)值。我无法弄清楚如何做到这一点。有人可以帮忙吗?

pmt txt文件格式为

0.418705 2 3 1985 20 0
0.420657 4 5 119 3849 5 
0.430000 2 3 1985 20 500

依旧......

因此,例如,对于第2列中的数字2,我添加了与第2列中所有数字“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 :(得分:0)

听起来你想使用带有sorted参数的key函数来获取键/值元组的值:

sorted_items = sorted(source_ip.items(), key=lambda x: x[1])

你也可以使用itemgetter模块中的operator,而不是lambda函数:

import operator
sorted_items = sorted(source_ip.items(), key=operator.itemgetter(1))

答案 1 :(得分: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 ("-----------")