微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据双重条件对txt中的行进行排序

如何解决根据双重条件对txt中的行进行排序

我有一个很大的 txt 文件,其结构如下:

  • title_topic --> 约 1900 个不同的值
  • title_foreach_post --> 可以与 title_topic 或 [] 相同
  • post_number --> 从 null 开始一直到 n

我想知道是否有办法a)重新组合和排序所有具有相同 title_topic 和 b) 的行然后根据逻辑数字顺序对它们进行排序( 1、2..9、10、11、12 等)。

提前谢谢大家。

txt 文件示例:

{"title_topic": "Résoudre unproblème avec Go voyage","title_foreach_post": ["\nRe: Résoudre unproblème avec Go voyage"],"post_number": "null"}

{"title_topic": "Résoudre unproblème avec Go voyage","post_number": "1."}

{"title_topic": "Résoudre unproblème avec Go voyage","post_number": "10."}

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée"],"post_number": "null"}

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","post_number": "1."}>

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","post_number": "12."}>

{"title_topic": "Résoudre unproblème avec Go voyage","post_number": "11."}

{"title_topic": "Résoudre unproblème avec Go voyage","post_number": "12."}

输出示例:

Output example

解决方法

正如您在下面的代码中看到的,我使用 sorted() 内置函数按两个字段 (e['title_topic'],e['post_number']) 对条目列表进行排序。

举个例子,我正在使用 io.StringIO() 从文本字符串中读取输入文件来模拟文件输入,在现实生活中,您将使用常规文件读取。

Try it online!

import io,json

text = r"""
{"title_topic": "Résoudre un problème avec Go voyage","title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "],"post_number": "null"}
{"title_topic": "Résoudre un problème avec Go voyage","post_number": "1."}
{"title_topic": "Résoudre un problème avec Go voyage","post_number": "10."}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "],"post_number": "null"}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","post_number": "1."}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","post_number": "12."}
{"title_topic": "Résoudre un problème avec Go voyage","post_number": "11."}
{"title_topic": "Résoudre un problème avec Go voyage","post_number": "12."}
"""

data = [json.loads(line) for line in io.StringIO(text) if line.strip()]
data = sorted(data,key = lambda e: (e['title_topic'],int(float(e['post_number'])) if e['post_number'] != 'null' else 0))
print(data)

输出:

[
    {
        "title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","title_foreach_post": [
            "\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "
        ],"post_number": "null"
    },{
        "title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée","post_number": "1."
    },"post_number": "12."
    },{
        "title_topic": "Résoudre un problème avec Go voyage","title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],"post_number": "10."
    },"post_number": "11."
    },"post_number": "12."
    }
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。