2017-03-07 59 views
3

我有一個包含一個文本文件,這樣號的文本文件從文本文件鍵排序:如何使用python

7.2: 2 
7.3: 2 
6.5: 2 
6.4: 6 
6.3: 2 
7.7: 2 
6.1: 3 
7.5: 1 
7.8: 4 
7.9: 1 
6.9: 3 
6.8: 4 
10.1: 8 
10.0: 9 
10.3: 7 
10.2: 10 
10.5: 13 
10.4: 18 
10.7: 8 

我想是唯一使用的密鑰對它們進行排序。我不能將它們追加到字典中,只能使用鍵進行排序。這是我試過的。

def sorting(): 
    file = open(r'test.txt', 'r') 
    text = file.read().split() 
    keys = {} 
    for num in text: 
     if num not in keys: 
      keys.append(num) 
      keys.sort(key=float) 
    json.dump(keys, open('test1.txt', 'r') 

sorting() 
+2

你嘗試過什麼?什麼沒有用?堆棧溢出不是一個代碼寫入服務,請顯示一些跡象表明您已經付出了努力,如果遇到無法解決的障礙,我們將很樂意爲您提供幫助。 – ShadowRanger

+0

@ShadowRanger謝謝你,我編輯了我的問題。並把代碼,不適合我。 –

+0

新代碼在語法上不是有效的(缺少parens),並且存在嚴重的基本錯誤(將文件寫入打開的只讀文件)。試着簡化你的功能來做一件事(比如,從這樣的文件中讀取行並將它們返回,沒有來自和去往文件的I/O)。在交互式解釋器中使用更有針對性的代碼可以幫助您瞭解排序步驟。簡單的'print's(例如'print text [0]')可能會幫助你理解I/O的問題(提示:你的鍵和值甚至不會一起存儲在'list'的同一個索引中)。 – ShadowRanger

回答

0

,你可以讀取行,他們對結腸分割到元組,使用第二值進行排序,然後將它們寫入到輸出文件。

示例代碼:

with open('input.txt', 'r') as in_file: 
    lines = sorted((l.split(": ") for l in in_file.readlines()), key=lambda l: float(l[0])) 
    with open('output.txt', 'w') as out_file: 
    for line in lines: 
     out_file.write(": ".join(line)) 
+0

這似乎是按值排序,而不是鍵... – ShadowRanger

+0

好抓!固定。 –

+0

@HeshamAttia非常感謝!有用!雖然我將'double'換成了'float',因爲有一個錯誤說:'NameError:全局名'double'沒有定義。但這有助於我!非常感謝! –