如何在列表中添加作为字典值的元素,并且这些元素不能作为该字典的另一个键重复?

Ish*_*edi 9 python dictionary list python-3.x

假设我有一个包含字谜字符串的列表。例如,

anList = ['aba','baa','aab','cat','tac','act','sos','oss']
Run Code Online (Sandbox Code Playgroud)

我想构建一个包含该列表元素作为关键字的字典,该元素的字谜字符串将作为该关键字的值作为列表,而且将添加到列表中的元素也不会重复作为该字典的另一个关键字。例如,如果“ baa”已添加到列表中,该列表是键“ aba”的值,则“ baa”不能再添加为键。输出字典应该看起来像,

anDict = {'aba' : ['baa','aab'],'cat' : ['tac','act'],'sos' : ['oss']}
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法,但是问题是列表中添加的元素再次被添加为字典的键。

我该怎么办?

DYZ*_*DYZ 7

您可以使用Counter对象将单词按字母数分组:

from collections import Counter
from itertools import groupby

sorted list = sorted(anList, key=Counter)
groups = [list(y) for x, y in groupby(sortedList, key=Counter)]
#[['aba', 'baa', 'aab'], ['cat', 'tac', 'act'], ['sos', 'oss']]
Run Code Online (Sandbox Code Playgroud)

现在,将字谜列表列表转换成字典:

{words[0]: words[1:] for words in groups}
#{'aba': ['baa', 'aab'], 'cat': ['tac', 'act'], 'sos': ['oss']}
Run Code Online (Sandbox Code Playgroud)