无法正确按字谜分组
Posted
技术标签:
【中文标题】无法正确按字谜分组【英文标题】:can't group by anagram correctly 【发布时间】:2016-05-21 04:14:59 【问题描述】:我写了一个python函数来按字谜对单词列表进行分组:
def groupByAnagram(list):
dic =
for x in list:
sort = ''.join(sorted(x))
if sort in dic == True:
dic[sort].append(x)
else:
dic[sort] = [x]
for y in dic:
for z in dic[y]:
print z
groupByAnagram(['cat','tac','dog','god','aaa'])
但这只会返回:
啊啊
神
tac
我做错了什么?
【问题讨论】:
你期待什么? @MartinThoma 我期待所有 5 个字:aaa dog god cat tac in that order 与你的问题无关,但if sort in dic == True:
应该简单写成if sort in dic:
。
这正是导致问题的原因。
旁注:您可以使用defaultdict
来简化您的代码。
【参考方案1】:
if sort in dic == True:
感谢operator chaining,这行相当于
if (sort in dic) and (dic == True):
但是 dic 是一个字典,所以它永远不会等于 True。完全放弃 == True 比较。
if sort in dic:
【讨论】:
【参考方案2】:删除 if 子句中的“== True”。您可以在 dic 中使用 sort 进行检查。
将 if 子句更改为:
if sort in dic:
一切都按预期进行。
您还可以使用 collections 包的默认字典删除 if 子句。这样您就不必每次都检查是否必须为您的 dict 创建一个新列表。
import collections
def groupByAnagram2(word_list):
dic = collections.defaultdict(list)
for x in word_list:
sort = ''.join(sorted(x))
dic[sort].append(x)
for words in dic.values():
for word in words:
print word
【讨论】:
以上是关于无法正确按字谜分组的主要内容,如果未能解决你的问题,请参考以下文章