Python词表

时间:2011-09-19 11:27:03

标签: python dictionary

我想将输入字母(字典)与列表(带有单词的文本文件)进行比较,并打印与输入字母匹配的单词。我做错了什么?(我知道如果它现在找到一个匹配的单词,我只有一个打印YES或NO函数。顺便创建这个函数的最佳方法是什么?)。

def ordlista(list):
    fil = open("ord.txt", "r")
    words = fil.readlines()

    list = []

    for w in words:
        w = w.strip()
        list.append(w)
    return list


chars = {}
word = raw_input("Write 9 letters: ")

for w in word:
    w = w.lower()
    if w not in chars:
        chars[w] = 1
    else:
        chars[w] += 1


if chars.keys() in ordlista(list):
    print "YES"
else:
    print "NO"

3 个答案:

答案 0 :(得分:2)

您正在检查字符列表中是否存在整个键列表,而不是单独检查每个键。您必须单独迭代您的密钥,然后检查它们的存在。

for k in chars:
    if k in ordlista(list):
        print "YES"
    else:
        print "NO"

如果您想打印仅由字符列表中的字母组成的单词,您可以使用以下方法。

for word in ordlista(list):
    if not filter(lambda char: char not in chars, word):
        print word

答案 1 :(得分:2)

chars.keys()是一个列表,所以

chars.keys() in ordlista(list):

永远不会是真的。你想要的是匹配列表中每个单词的字母数。所以我建议

charsum = sum(chars.values())
for word in wordlist:
    if len(word) == charsum and all([(word.count(c) == chars[c]) for c in chars]):
        print "YES for word '%s'" % word

编辑:如果你想要匹配那些至少字母计数的单词(即一个带有3个字的单词将匹配两个a的输入),那么你将不得不改变==>=

EDIT2:由于您需要完全匹配,最简单的解决方案是计算字符数并确保单词具有该长度。

答案 2 :(得分:1)

使用sets

chars = set(raw_input("Write 9 letters: "))

for word in ordlista(None):
    if(set(word) == chars):
        print "YES for '%s'" % word

顺便说一下,listordlista的参数是不必要的,因为它没有被使用。我还建议不要使用名称list,因为它隐藏了内置的<type 'list'>

更新:我已阅读你关于jellybean帖子的评论。如果每个字母只能使用一次,你显然不能使用套装!