python - 对不一致数量的元素列表的最后一个元素进行排序

标签 python sorting

简介

跟进 this question .

目的:对元素个数不一致列表的最后一个元素进行排序

方法

代码

import os

cwd = os.getcwd()

for fn in os.listdir(cwd):
    print(fn)

    with open(fn, "r+") as f, open(cwd + "\\all.txt", "r+") as f2:
        lines = sorted(f, key=lambda text: text.split('-', 1)[::-1])
        print(lines)

        my_new_list = [fn + " - " + x for x in lines]
        print (my_new_list)

        f2.write("\n".join(my_new_list))

样本

aa - http://cc
bb - http://bb
cc - http://aa
aa - aa - http://cc
bb - bb - http://bb
cc - cc - http://aa
aa - aa - aa - http://cc
bb - bb - bb - http://bb
cc - cc - cc - http://aa

输出

列表未按最后一个元素排序。看来排序发生在第二个元素上。

当前

sample.txt - aa - aa - aa - http://cc

sample.txt - aa - aa - http://cc

sample.txt - bb - bb - bb - http://bb

sample.txt - bb - bb - http://bb

sample.txt - cc - cc - cc - http://aa
sample.txt - cc - cc - http://aa

sample.txt - cc - http://aa

sample.txt - bb - http://bb

sample.txt - aa - http://cc

预期

sample.txt - cc - http://aa
sample.txt - cc - cc - http://aa
sample.txt - cc - cc - cc - http://aa

sample.txt - bb - http://bb
sample.txt - bb - bb - http://bb
sample.txt - bb - bb - bb - http://bb

sample.txt - aa - http://cc
sample.txt - aa - aa - http://cc
sample.txt - aa - aa - aa - http://cc

最佳答案

你的问题是 text.split('-', 1) 它只分割字符串一次(在 first '-' ).

你实际上想在 last '-' 中拆分,所以你想要 text.rsplit('-', 1)

*注意,rsplit,而不是split :-)

关于python - 对不一致数量的元素列表的最后一个元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165701/

相关文章:

python - 从管道获取模型属性

python - 为什么我无法连接到 django 服务器?

Android:PY4A(SL4A):如何知道 wifiStartScan() 后 wifi 扫描何时完成?

C++ 泛型插入排序

python - 使用 python 选择 dataFrame 中具有相同索引的行

python - 我应该使用哪种协议(protocol)来传输音频(非直播)?

python - 计算不规则间距点密度的有效方法

java - 使用 Array.sort() 不使用比较器对数组进行排序

algorithm - 特定数组的哈希

ios - 根据位置对 UIView subview z 顺序进行排序