【问题标题】: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 来简化您的代码。

标签: python string algorithm hashtable


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2012-11-07
      • 2011-03-23
      • 2012-03-17
      • 2013-07-29
      • 1970-01-01
      • 2012-03-27
      • 2015-12-25
      • 2010-09-28
      相关资源
      最近更新 更多