2014-04-17 70 views
0

我已经在python中编写了一个程序,其中我使用了一个散列表来读取文件中的数据,然后将数据添加到文件的最后一列中文件第二列中的值。例如,对于列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'在第二列。所以,这个过程将持续在列下一组数字说谎4,5,等2

我使用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 ("-----------") 
+0

请提供一个'pmt.txt'内容的简单示例。这样做可能比您实施的方法好得多,但只有我们能够做到这一点,而无需看到示例输入。还请说明是否正在使用Python 2或3 –

+0

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列的下一组数字lie 4,5等。 我正在使用python 3 – user3547134

+0

请问您是否将此问题编辑为您的问题,格式正确? (每行有4个空格,用于等宽和灰色背景。) –

回答

0

这听起来像你想使用的功能sorted用一个key参数,从键/值元组得到值:

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

你也可以使用itemgetteroperator模块,而不是lambda函数:

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

我认为它应该按键排序('x [0]')。 –

+0

它需要根据第2列条目添加后最后一列的值进行排序,即需要按降序对source_ip [s_ip]进行排序,并打印排序后的值和相应的键。 – user3547134

+0

@ user3547134:如果你想降序而不是升序,除了'key'函数之外,还可以在'sorted'中添加一个'reverse = True'参数。 – Blckknght

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 ("-----------") 
+0

工作但是排序? – user3547134

+0

谢谢你指出。 – dstromberg

+0

我已添加排序并消除了大吸入。 – dstromberg

相关问题