Python列表排序问题:排序无效及字符串无sort属性报错求助
解决Python按行首字母排序的问题
嘿,我来帮你搞定这个排序问题!咱们先拆解下你代码里的问题,再一步步修正。
问题根源
你现在的代码里,myList其实是单个字符串(每次循环生成一行单词\t词元\t词性\t标签的字符串),而不是存储所有行的列表:
- 字符串没有
sort()方法,所以调用myList.sort()会直接抛出AttributeError - 你用的
sorted(myList)只是把当前这个字符串的字符拆开来排序,完全不是你想要的“按所有行的首字母排序”的效果
修正方案
我们需要先把所有行收集到一个列表里,等所有行都生成完再统一排序,最后输出:
- 初始化一个空列表来存储所有行
- 循环中把每一行字符串添加到列表里
- 循环结束后对列表按行首字母排序
- 遍历排序后的列表打印每一行
修正后的完整代码
#!/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
相关产品推荐
相关产品推荐

