python csv sort with'right'音调符号ord

2024-05-14 09:28:00 发布

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

我想修改一下csvsort.py(csvkit,https://csvkit.readthedocs.org/en/0.9.0/)以便正确处理音调符号。在

我发现这段代码(http://www.gossamer-threads.com/lists/python/python/1030549)非常适合对列表进行排序:

alphabet = (
u' ', u'.', u'\'', u'-', u'0', u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'a', u'A', u'ä', u'Ä', u'á', u'Á', u'â', u'Â',
u'à', u'À', u'å', u'Å', u'b', u'B', u'c', u'C', u'ç', u'Ç', u'd', u'D', u'e', u'E', u'ë', u'Ë', u'é', u'É', u'ê', u'Ê', u'è', u'È',
u'f', u'F', u'g', u'G', u'h', u'H', u'i', u'I', u'ï', u'Ï', u'í', u'Í', u'î', u'Î', u'ì', u'Ì', u'j', u'J', u'k', u'K', u'l', u'L',
u'm', u'M', u'n', u'ñ', u'N', u'Ñ', u'o', u'O', u'ö', u'Ö', u'ó', u'Ó', u'ô', u'Ô', u'ò', u'Ò', u'ø', u'Ø', u'p', u'P', u'q', u'Q',
u'r', u'R', u's', u'S', u't', u'T', u'u', u'U', u'ü', u'Ü', u'ú', u'Ú', u'û', u'Û', u'ù', u'Ù', u'v', u'V', u'w', u'W', u'x', u'X',
u'y', u'Y', u'z', u'Z'
) 

hashindex = {character:index for index, character in enumerate(alphabet)}
def string2sortlist(string):
    return [hashindex[s] for s in string]


import random
things_to_sort = ["".join(random.sample(alphabet, random.randint(4, 6)))
for _ in range(200000)]

print(things_to_sort[:15])

things_to_sort.sort(key=string2sortlist)

print(things_to_sort[:15])

所以问题是:

我应该如何修改

^{pr2}$

从csvsort.py,以使用上述工作代码中的hashindex()。在

蒂娅。在

米格尔。在


Tags: to代码inpyforindexrandomsort
1条回答
网友
1楼 · 发布于 2024-05-14 09:28:00

sort调用的key参数是一个函数,它告诉如何(按什么顺序)排序项目。在

显然,csvkit使用一个带有布尔值和一个值的元组来对值进行排序,并在末尾有空列(可能是在开始处)。在

注意,csvkit的函数被应用到每一行进行排序,但是sorter函数总是应用于列id,在每一行都给出相同的顺序。在

因此,您应该定义散列函数和排序函数,然后修改sorter函数,使其成为:

sorter = lambda r: [(r[c] is not None, string2sortlist(r[c])) for c in column_ids]

这样就保持了列标题为空的行为。对于其他列标题,将字符串替换为字符的哈希值列表,从而实现所需的排序。在

它仍然像以前一样只应用于列标题,所以您对每一行的排序应该仍然相同。在

相关问题 更多 >

    热门问题