检查字典是否是另一个字典的子集

时间:2017-05-24 20:42:05

标签: python dictionary

我正在尝试比较2个字符串并检查字符串a中是否存在字符串b中的所有字符。我目前正在使用以下方法,将字符串转换为字典并将其与另一个字典进行比较。但是有很多机会它会产生误报。

x = 'NJITZU THE HANDS OF TIME'
y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
if Counter(x) < Counter(y):
    print 'Yes'
else:
    print 'No'

请建议任何更好的方法来执行此操作

3 个答案:

答案 0 :(得分:5)

如果我正确理解您的问题,您不需要比较字典,而是设置:

>>> x = 'NJITZU THE HANDS OF TIME'
>>> y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
>>> set(x).issubset(set(y))
False

如果您想要不区分大小写的比较,可以在两个字符串上调用lower()

>>> set(x.lower()).issubset(set(y.lower()))
True

您还可以使用split()来比较整个单词:

>>> set(x.lower().split())
set(['of', 'the', 'time', 'njitzu', 'hands'])
>>> set(x.lower().split()).issubset(set(y.lower().split()))
False
>>> set('SPINJITZU THE HANDS OF TIME'.lower().split()).issubset(set(y.lower().split()))
True

答案 1 :(得分:2)

我会使用set对象。 Documentation can be found here.

x = 'NJITZU THE HANDS OF TIME'
y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
if set(x.lower()) <= set(y.lower()):
    print('Yes')
else:
    print('No')

<运算符重载为is_subset。为了得到打印“是”的答案,我还将字符串转换为小写。

答案 2 :(得分:1)

您可以使用内置all功能。

all(character in y for character in x)
如果每个元素都为true,则

all()将返回true,否则返回false。我们使用in检查字符是否在字符串y中,我们将为每个character in x执行此操作。