我一直在编写一个函数来排序和挑选特定的单词来形成句子。问题是我一生都无法获得任何形式的 .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']
您可以将所有行读取到列表中,然后根据第一个整数对行进行排序,最后一步用排序后的行压平列表:
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']