Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查一个dict中的所有对是否也存在于另一个dict中,可能具有相等或更低的对应值_Python - Fatal编程技术网

Python 检查一个dict中的所有对是否也存在于另一个dict中,可能具有相等或更低的对应值

Python 检查一个dict中的所有对是否也存在于另一个dict中,可能具有相等或更低的对应值,python,Python,这里有一个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. D

这里有一个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})
这会给出输出<代码>真,但是正确的输出是<代码>假。 这是因为dict中没有
e

这里的虫子在哪里?我如何检查一个dict中的所有对是否也存在于另一个dict中,可能具有相等或更低的对应值(键)。

您是指该行吗

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

否则,字典中的所有值都将是
0
,函数将始终返回
True
(除非字符串为空或给定字典中的任何值都是
0

还要注意的是,在第一个循环中使用
集合会更容易

d = collections.Counter(strng)
至于你关于测试一个dict是否在另一个dict中的问题,你可以做:

all(k in dct and v < dct[k] for k, v in d.items())
all(k在dct中,v
当你说
d[x]=d.get(x,0)
时,你的意思是
d[x]=d.get(x,0)+1吗?
?哎呀..是的,更正了!!它现在表现出正确的行为了吗?是的..感谢这个错误..但主要的问题是如何检查一个dict是否是另一个dict的子集??
all(k in dct and v < dct[k] for k, v in d.items())