Skip to main content
 首页 » 编程设计

python之排序字符串列表之外部列表中的内部列表

2025年05月04日21sky-heaven

我正在尝试解决以下问题: 写一个函数:

def sort_anagrams(list_of_strings): 

此函数应接收单词列表并返回变位词,这意味着所有具有相同字母的单词将出现在内部列表中,所有内部列表出现在外部列表中,请参见示例

list_of_words = ['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', 'staled', 'greatening', 'lasted', 'resmelts']  

输出应该是:

[ 
  ['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted'], 
  ['retainers', 'ternaries'], ['pants'], ['generating', 'greatening'],  
  ['smelters', 'termless', 'resmelts'] 
] 

我尝试了以下方法:

list_of_words=['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', 'staled', 'greatening', 'lasted', 'resmelts']  
 
cx=sorted(list_of_words,reverse=False,key=lambda x:sorted(x))   
print(cx) 

但这只是将变位词放在一起,而没有我想要的内部列表:

['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted', 'generating', 'greatening', 'retainers', 'ternaries', 'pants', 'smelters', 'termless', 'resmelts'] 

请您参考如下方法:

这是一种使用 collections.defaultdict 的方法。

例如:

from collections import defaultdict 
 
list_of_words = ['deltas', 'retainers', 'desalt', 'pants', 'slated', 'generating', 'ternaries', 'smelters', 'termless', 'salted', 'staled', 'greatening', 'lasted', 'resmelts']  
result = defaultdict(list) 
for item in list_of_words: 
    result["".join(sorted(item))].append(item) 

使用setdefault

例如:

result = {} 
for item in list_of_words: 
    result.setdefault("".join(sorted(item)), []).append(item) 
 
print(list(result.values())) 

输出:

[['deltas', 'desalt', 'slated', 'salted', 'staled', 'lasted'], 
 ['retainers', 'ternaries'], 
 ['pants'], 
 ['generating', 'greatening'], 
 ['smelters', 'termless', 'resmelts']]