基于双条件对txt中的行进行排序

2024-09-27 21:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 标题(主题)-->~1900个不同的值
  • 职位名称-->;可以与title_topic或[]相同
  • 邮政编码-->;从null开始,直到n

我想知道是否有一种方法可以a)重新组合和排序所有标题相同的行\u主题和b)然后根据逻辑数字顺序(1,2..9,10,11,12等)对它们进行排序

提前谢谢大家

txt文件示例:

{"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", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "1."}

{"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."}

{"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", "title_foreach_post": ["\nRe: 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", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "], "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": "11."}

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "12."}

输出示例:

Output example


Tags: gonumbertopictitlepostunmeforeach
1条回答
网友
1楼 · 发布于 2024-09-27 21:23:21

正如您在下面的代码中所看到的,我使用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", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "1."}
{"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."}
{"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", "title_foreach_post": ["\nRe: 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", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "], "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": "11."}
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: 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",
        "title_foreach_post": [
            "\nRe: 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",
        "title_foreach_post": [
            "\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "
        ],
        "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": "null"
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "1."
    },
    {
        "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."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "11."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "12."
    }
]

相关问题 更多 >

    热门问题