Anagram字典作为键

时间:2015-11-26 19:03:33

标签: python dictionary

尝试创建一个anagram探测器。显然,下面的代码会返回语法错误,因为您不能将hashable类型作为值或键。

约束:不能使用导入。

>>> d1
{'star': {{'r': 1}, {'a': 1}, {'t': 1}, {'s': 1}} }

>>> d2
{'rats': {{'a': 1}, {'r': 1}, {'s': 1}, {'t': 1}} }

我试图将字母存储为dict值的原因是因为我希望能够利用dict内置的__eq__检查:

>>> d1['star'] == d2['rats']
True

这样我知道这两个词都是字谜。

3 个答案:

答案 0 :(得分:3)

我似乎误解了你的问题,但请注意:

>>> d1 = {'star': {'r': 1, 'a': 1, 't': 1, 's': 1}}
>>> d2 = {'arts': {'a': 1, 'r': 1, 't': 1, 's': 1}}
>>> d1['star'] == d2['arts']
True

答案 1 :(得分:0)

你根本不需要两个dict只将原始单词存储在一个dict中,内部字典带有字母频率并减去:

d = {'star': {'r': 1, 'a': 1, 't': 1, 's': 1}}

word = "rats"


def checker(d, w1, w2):
    wrd = d[w1]
    for ch in w2:
        if ch not in wrd or wrd[ch] < 1:
            return False
        wrd[ch] -= 1
    return True


print(checker(d, "star",word))

答案 2 :(得分:0)

如何对字符串进行排序?

>>> sorted("star") == sorted("rats")
True