-1
def mkEntry(file1):
    for line in file1:
        lst = (line.rstrip().split(","))
        print("Old", lst)
        print(type(lst))
        lst = tuple(lst)
        print(type(lst)) #still showing type='list'
        print("Old2", lst)
    sorted(lst, key=operator.itemgetter(1,2))


def main():
    openFile = 'yob' + input("Enter the year <Do NOT include 'yob' or .'txt' : ") + '.txt'
    file1 = open(openFile)
    mkEntry(file1)

main()

受け取ったエラー:

Traceback (most recent call last):
  File "/Users/ranbir/Desktop/names/top101.py", line 20, in <module>
    main()
  File "/Users/ranbir/Desktop/names/top101.py", line 18, in main
    mkEntry(file1)
  File "/Users/ranbir/Desktop/names/top101.py", line 12, in mkEntry
    sorted(lst, key=operator.itemgetter(1,2))
IndexError: string index out of range

ファイル:

Tom,M,1658
Anthony,M,985
Lisa,F,88976
Ben,M,6989
Shelly,F,8975

F順序をM最小の数字から最大の数字に並べ替えるのに助けが必要です。出力は次のようになります。

Shelly,F,8975
Lisa,F,8976
Ben,M,698
Anthony,M,985
Tom,M,1658

したがって、基本的には、最初に女性、次に最小数から最大数、次に男性、次に最小数から最大数 ( M=male, f=female) になります。

4

1 に答える 1

1

lstループ内で常に再割り当てしています:

for line in file1:
    lst = (line.rstrip().split(","))
    lst = tuple(lst)

sorted(lst, key=operator.itemgetter(1,2))

すべてのエントリの最終リストを作成していません。そのためには、別のリスト オブジェクトが必要です。

results = []
for line in file1:
    lst = line.rstrip().split(",")
    lst = tuple(lst)
    results.append(lst)

return sorted(results, key=operator.itemgetter(1,2))

ソートされたリストも返す必要があることに注意してください。

最後の要素 (インデックス 2) はまだ文字列であるため、これでも期待どおりには動作しません。文字列は辞書順でソートされるため、前に'10'ソートされます。代わりにそれを数字にします: '91234'

results = []
for line in file1:
    lst = line.rstrip().split(",")
    lst[2] = int(lst[2])
    lst = tuple(lst)
    results.append(lst)

return sorted(results, key=operator.itemgetter(1,2))
于 2013-10-12T19:35:00.870 に答える