我正在尝试解决以下问题: 写一个函数:
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']]
