2

個人用の .txt ファイルがあり、各個人の隣に 2 回あります。これは.txtファイルです

 Xantippe 09:00 11:00
 Erica 10:00 12:06
 Marcia 09:30 11:45
 Elizabeth 10:15 12:10
 Angela 11:30 13:45
 Freda 12:00 14:20
 Maria 12:30 14:10

ファイルを読み取ってから、各行を取得して読み取り、2 回目でリスト全体を並べ替える必要があります。ファイル内の数値は文字列オブジェクトであることを忘れないでください。したがって、基本的に最も早い時間、つまり 11:00 は、以前の時間と名前とともにリストの一番上にあるはずです。例えば。Xantippe 09:00 11:00そして、別の行で次の行など。

これまでのところ、私はやっています:

from Practise1 import timeCalc
with open('LadiesRace.txt', 'r') as f:
  readf = f.read();
  timeX = timeCalc()
  lis = readf.split('\n')
  with open('sortByFinishTime.txt','w') as w:
    def compare(x,y):
      if x[1] > y[1]:
        return 1
      if x[1] < y[1]:
        return -1
      return 0
    #lis.sort()
    for l in lis:
      #line = l.strip()
      slist = l.split(' ')
      print slist[2]

問題は、辞書を使用できず、リストのみを使用できることです。リストを名前で昇順に並べ替えることができましたが、前回はどのように並べ替えるのですか?

4

1 に答える 1

9

まず、データを使用可能な形式にする必要があります...それでメモリ内のリストにロードしましょう - dicts は本質的に順序を持たないことに注意することが重要です。

with open('myfile.txt') as fin:
    lines = [line.split() for line in fin]

これにより、末尾の改行が削除され、スペース文字で分割されます...したがって、次のようになります。

[['Xantippe', '09:00', '11:00'], ['Erica', '10:00', '12:06'], ['Marcia', '09:30', '11:45'], ['Elizabeth', '10:15', '12:10'], ['Angela', '11:30', '13:45'], ['Freda', '12:00', '14:20'], ['Maria', '12:30', '14:10']]

次に、.sorta のメソッドを使用できますlist-itemgetterは、シーケンスの n 番目の要素を取得するための便利なメソッドです。そのため、name、start、end があります。ここで、end は 2 番目のインデックスです (0 が最初であることに基づいて、これが名前)

from operator import itemgetter
lines.sort(key=itemgetter(2))

最終的には次のようになります。

[['Xantippe', '09:00', '11:00'], ['Marcia', '09:30', '11:45'], ['Erica', '10:00', '12:06'], ['Elizabeth', '10:15', '12:10'], ['Angela', '11:30', '13:45'], ['Maria', '12:30', '14:10'], ['Freda', '12:00', '14:20']]

次に、それを書き戻します。

with open('output.txt', 'w') as fout:
    for el in lines:
        fout.write('{0}\n'.format(' '.join(el)))
于 2012-11-23T12:20:32.190 に答える