在Python中按每个列表的长度和字母顺序如果绑在一起排列集

问题描述

有没有一种方法可以按长度将多个字符串集按Python的长度降序排列,如果两个或多个列表绑定在一起,则按字母顺序对列表进行排名?

假设我得到以下列表:

rankings = []
general = {'hello','how are you','good','thanks'}
fun = {'lowkey','jello','karaoke','stardown','hilarIoUs','highkey','drunk','sports'}
subjects = {'math','science','english','french','history'}
cities = {'Rome','NYC','London','Toronto'}
animals = {'bird','elephant','mouse','dog','cat'}
foods = {'banana','fish','meat'}

我的预期输出是:

rankings = ["fun","animals","subjects","cities","general","foods"]

对此背后的基本代码有何想法?

谢谢。

解决方法

您将需要为每个标识符使用字符串文字,以便按标识符作为次要的“抢七”。

请参阅Python文档中的sorting的“关键功能”部分。

all_sets = {'general': {'hello','how are you','good','thanks'},'fun': {'lowkey','jello','karaoke','stardown','hilarious','highkey','drunk','sports'},'subjects': {'math','science','english','french','history'},'cities': {'Rome','NYC','London','Toronto'},'animals': {'bird','elephant','mouse','dog','cat'},'foods': {'banana','fish','meat'}}
items = list(all_sets.items())

def sorter(dict_item):
    k,v = dict_item        # k is identifier and v is the set
    return (-len(v),k)     # sort descending by set length,ascending by identifier

sorted_items = sorted(items,key=sorter)
sorted_keys = [k for k,v in sorted_items]

产生的sorted_keys的值:

['fun','animals','subjects','cities','general','foods']

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...