早上好!
就我当前面临的问题寻求帮助。我有一个名为username的列表,如下所示:
用户名= ['Paul','Polish','poloski','melind','Melinda','MeRind','arabic','arabia']
a)我想根据长度/排序的降序对列表进行排序 b)对于长度相同的元素,我想像组成字典中的每个字母一样对它们进行排序,就像它在字典中的显示方式一样(例如“ arabia”在“ arabic”之前)
为了更加清楚,我的目标是创建最终的修改后的列表,使其看起来像:
['Melinda','poloski','arabia','arabic','melind','MeRind','Polish','Paul')
感谢您的帮助。
答案 0 :(得分:0)
您可以这样做:
username.sort(key=lambda item: (-len(item), item.lower()), reverse=False)
In [3715]: username
Out[3715]:
['Melinda',
'poloski',
'arabia',
'arabic',
'melind',
'MeRind',
'Polish',
'Paul']
您可以在这样的数据框中执行此操作:
pd.DataFrame(username).apply(lambda x: list((sorted(x, key=lambda item: (-len(item), item.lower())))))
0
0 Melinda
1 poloski
2 arabia
3 arabic
4 melind
5 MeRind
6 Polish
7 Paul
答案 1 :(得分:0)
sorted
可以使用一个函数,该函数返回键的元组,每个元组的第一个元素将用于排序,然后在冲突时使用第二个,依此类推。
先按长度排序,然后按字母顺序排序(忽略大小写)
sorted(username, key=lambda u: (len(u), u.lower()))