问题描述
有没有一种方法可以按长度将多个字符串集按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']