无法让这个排序函数在Python中工作

问题描述 投票:0回答:1

我一直在编写一个函数来排序和挑选特定的单词来形成句子。问题是我一生都无法获得任何形式的 .sort 或排序工作。我需要将列表中的项目按数字顺序排序,并使整数右侧的单词与它们的配对整数保持一致。

这是我的代码:

def decode(message_file):

    decoded_message = []

#opens the external file, and places it into file, and then reads file into message
    with open(message_file, 'r') as file:
        message = file.read()

#takes the message and splits it between the numbers and the txt
    pairs = message.split()

    #sorted(pairs, key = lambda x: x[0])
    pairs.sort(key = lambda x: [0])

    print(pairs)

decode("test.txt")

pairs.sort 和向底部排序是我遇到问题的地方。无论我做什么,它实际上都不会对列表进行排序,并且它总是打印相同的内容。

测试.txt:

3 love
6 computers
2 dogs
4 cats
1 I
5 you

输出:

['3', 'love', '6', 'computers', '2', 'dogs', '4', 'cats', '1', 'I', '5', 'you']

我尝试了不同的 .sort 和排序函数,并尝试了不同的编写键的语法,并试图弄清楚如何真正让东西移动。我对 Python 还很陌生,所以我不知道我是否遗漏了一些东西。

我的输出应该是:

['1', 'I', '2', 'dogs', '3', 'love', '4', '5', 'you', 'cats', '6', 'computers']
python list file sorting
1个回答
0
投票

您可以将所有行读取到列表中,然后根据第一个整数对行进行排序,最后一步用排序后的行压平列表:

with open("test.txt", "r") as f_in:
    lines = [i for i in map(str.strip, f_in) if i]

out = [
    word
    for line in sorted(lines, key=lambda x: int(x.split()[0]))
    for word in line.split()
]

print(out)

打印:

['1', 'I', '2', 'dogs', '3', 'love', '4', 'cats', '5', 'you', '6', 'computers']
© www.soinside.com 2019 - 2024. All rights reserved.