订购性别和数字

时间:2013-10-12 16:10:36

标签: python list

我需要帮助订购清单:

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上很糟糕。 感谢。

2 个答案:

答案 0 :(得分: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:]))

答案 1 :(得分: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))