无法正确按字谜分组

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

【讨论】:

以上是关于无法正确按字谜分组的主要内容,如果未能解决你的问题,请参考以下文章

通过 Python 查找和分组字谜

无法按组解决字谜?

对字谜词进行分组的算法

Java 8 Stream 函数将字谜列表分组为列表映射

SQL 按年份分组给出不正确的结果

Vuetify 数据表分组与分页未按预期工作