You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表排序问题:排序无效及字符串无sort属性报错求助

解决Python按行首字母排序的问题

嘿,我来帮你搞定这个排序问题!咱们先拆解下你代码里的问题,再一步步修正。

问题根源

你现在的代码里,myList其实是单个字符串(每次循环生成一行单词\t词元\t词性\t标签的字符串),而不是存储所有行的列表:

  • 字符串没有sort()方法,所以调用myList.sort()会直接抛出AttributeError
  • 你用的sorted(myList)只是把当前这个字符串的字符拆开来排序,完全不是你想要的“按所有行的首字母排序”的效果

修正方案

我们需要先把所有行收集到一个列表里,等所有行都生成完再统一排序,最后输出:

  1. 初始化一个空列表来存储所有行
  2. 循环中把每一行字符串添加到列表里
  3. 循环结束后对列表按行首字母排序
  4. 遍历排序后的列表打印每一行

修正后的完整代码

#!/usr/bin/env python3
import xml.etree.ElementTree as ET

tree = ET.parse('A00.xml')
root = tree.getroot()

# 初始化空列表,用来存储所有要排序的行
all_lines = []

for w in root.iter('w'):
    lemma = w.get('hw')
    pos = w.get('pos')
    tag = w.get('c5')
    # 生成当前行的字符串(用f-string更简洁)
    current_line = f"{w.text}\t{lemma}\t{pos}\t{tag}"
    # 将当前行添加到列表中
    all_lines.append(current_line)

# 按每行的首字符排序(x[0]就是每行的第一个字符)
all_lines.sort(key=lambda x: x[0])

# 打印排序后的所有行
for line in all_lines:
    print(line)

额外优化提示

如果你的行首可能有空格或者非字母字符,想忽略这些只按有效字母排序,可以把排序key改成:

all_lines.sort(key=lambda x: x.strip()[0])

先去掉首尾空白再取首字符,排序会更精准。

内容的提问来源于stack exchange,提问作者pglove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:38:57