0

ここにdictと文字列があり、dictにはキーと値のペアとしてchar-countが含まれています。文字列内のすべての文字が完全にdictに含まれているかどうかを確認したいと思います。

これは、dictに文字列のすべての文字が含まれ、それらのカウントがdictの対応する値以下であることを意味します。

def isValidWord(strng, dct):
    """
    Returns True if strng is entirely
    composed of letters in the dct.
    Otherwise, returns False.

    Does not mutate hand or dct.
    """

    d={}
    for x in strng:
        d[x]=d.get(x,0)

    for x in d:
        if d[x]> dct.get(x,0):
            return False

    return True

ほとんどの場合はうまくいくようですが、うまくいかない場合もあります。例えば ​​-

isValidWord('chayote', {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 
'o': 2})

これにより出力が得られますTrueが、正しい出力はFalseです。これはe、口述にないためです。

ここのバグはどこにありますか?そして、dict内のすべてのペアが別のdictにも存在するかどうかを確認するにはどうすればよいですか?おそらく(キーの)対応する値が等しいか、それよりも低くなります。

4

1 に答える 1

1

あなたはラインのために意味しました

d[x]=d.get(x,0)

することが

d[x]=d.get(x,0) + 1

それ以外の場合、ディクショナリのすべての値はに0なり、関数は常に戻りTrueます(文字列が空であるか、指定されたディクショナリの値がである場合を除く)0

collections.Counterまた、最初のループで使用する方が簡単であることに注意してください。

d = collections.Counter(strng)

あるdictが別のdictにあるかどうかをテストするという質問については、次のことができます。

all(k in dct and v < dct[k] for k, v in d.items())
于 2013-03-10T05:40:40.053 に答える