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

1 投票
2 回答
3724 浏览
提问于 2025-04-18 03:12

我写了一个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))

撰写回答