我试图对一个结果进行排序,然后在字符之后的整数字符':'之后写入输出文件。
首先,我尝试使用排序功能,但它不起作用,因为它不是一个列表。我还尝试将所有内容转换为字符串列表并尝试进行相应排序,但不认为这是最有效的方法。
注意:输出文件行都是字符串
**Current written output in output_file1.txt:**
hi: 011
hello: 000
hero: 001
You are done!
**Expected written output in output_file1.txt:**
hello: 000
hero: 001
hi: 011
You are done!
谢谢您的帮助。
with open(filepath) as file:
r = file.readlines()
#splits based on ":" and then sort using the second value ie binary numbers
s = sorted([line.split(":") for line in r[1:-1]], key=lambda x: int(x[1]))
s.insert(0,r[0])
s.append(r[-1])
#Write 's' into File
我会从一开始就按顺序插入行,你可以使用二进制搜索有效地完成。
问:如何将当前行中的当前数字与旧文件进行比较。
回答:
情况1:如果最大行数为111,(在您的示例中,您以001开头,我假设您用零填充以显示您希望每个数字有多少位数)或者您现在是最大行数,您可以使用足够数量的零,那么您所要做的就是将当前数字与行中当前最后三个条目进行比较(行[-3:])。
案例2:您不知道位数:
Sol 2.1:您可以尝试存储单词的文件和数字的文件,并且并行更新它们,这将使您免于Sol 2.2的开销。
Sol 2.2:用分隔符':'拆分行并获取数字(不要忘记分隔符后面有空格)。
这就是我现在想出来的!
如上所述,无法对文件进行排序。
关于你的第二个问题,你可以使用list.sort(key=sort_key)
。这允许您在比较排序元素时提供应用于列表中每个元素的方法。
在您的情况下,您可以定义一个简单的函数,它提取最后三个字符并按字母顺序排序:
def num_sort(x):
return x[-3:]
your_list.sort(key=num_sort)