我有一个像这样的列表列表:[['Hello', 'Hi'], ["Hola", "Hi", "Ciao"], ["Ciao", "Hi"]]
。
我想要做的是创建一个字典,其中键是我的列表列表中的每个单词,值是单词出现在我的键出现的小列表中的字数。
期望的输出:
dict = {'Hello': {'Hi':1}, 'Hi': {'Hello':1, 'Hola':1, 'Ciao':2},
'Hola':{'Hi':1, 'Ciao':1}, 'Ciao':{'Hola':1, 'Hi':2}}
注意:我知道如何使用Python以及如何处理数据结构,但我正在努力 算法。我的意思是我应该拥有多少循环以及我的条件应该是多少?
答案 0 :(得分:0)
只考虑一个列表:['Hello', 'Hi']
。这会在您的输出(Hi -> Hello)
和(Hello -> Hi)
中生成两个“对”。要处理其中一个列表,我们正在查看类似的内容:
for x in l:
for y in l:
if x != y:
[update the count of x -> y]
(您可以使用itertools.combinations
或itertools.permutations
(取决于偏好)将其转换为一个循环。)
那么我们应该如何存储计数呢?如上所述,内部词典称为Counter
的实例,因为它基本上是一个字典,如果缺少密钥则默认为0(意味着您不必检查密钥的存在,您可以只增加值)。如果你的外部字典可能是一个默认为空的计数器的字典会很方便,你可以使用defaultdict
来完成。
我会留给你编写代码来更新计数并处理所有列表,但希望这足以让你走上正确的道路。 (defaultdict
和Counter
都在collections
。我最初发现defaultdict
文档有点混乱 - 你用counts = defaultdict(Counter)
创建一个。)< / p>