1

我需要帮助订购列表:

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

所以我需要帮助将顺序从 F 排序到 M,然后从最小数字到最大数字。输出应如下所示:

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

所以基本上,女性首先是最小到最大的数字,然后是男性,然后是最小到最大的数字。M = 男性,f = 女性。

这是我到目前为止所拥有的:

class names():
    pass
    #__slot__ == ('No', 'Name', 'Gender', 'Occurrences')

def mkEntry(textFileName):
    for currentFile in textFileName:
        print(currentFile.strip())

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

main()

我不知道你从那里去哪里。我不擅长python。谢谢。

4

2 回答 2

0

按第二个 (F/M) 和第三个 (698, 985, 1558...) 属性排序。

import operator

lst = [
    ('Lisa', 'F', 8976),
    ('Shelly', 'F', 8975),
    ('Tom', 'M', 1658),
    ('Anthony', 'M', 985),
    ('Ben', 'M', 698)]
]   
sorted(lst, key=operator.itemgetter(1, 2))
于 2013-10-12T16:26:14.027 回答
0

所以基本上你只需要在元组的0索引处跳过元素,'F'在'M'之前,简单的排序就可以完成这项工作:

sorted(a, key=lambda x: (x[1:]))

# [
#    ('Shelly', 'F', 8975),
#    ('Lisa', 'F', 8976),
#    ('Ben', 'M', 698),
#    ('Anthony', 'M', 985),
#    ('Tom', 'M', 1658)
#]

或者,如果您需要就地排序:

a.sort(key=lambda x: (x[1:]))
于 2013-10-12T16:19:25.750 回答