我正在输入一个字典,可能是:
myWorld = {'MH': {'Mumbai': 1, 'Pune': 2}, 'GUJ': 3, 'RSA': {} }
我的测试词典是:
World = {'MH': {'Mumbai': 1, 'Pune': 2}, 'GUJ': 3, 'RSA': {}, 'USA': 4, 'UK': 5 }
我想查看一个条件,如果我在myWorld
中输入的任何内容都不在World
中,则应该打印NotFound
for key, val in myWorld.iteritems():
if (key, val) not in (World.keys(), World.values()) in World.iteritems():
print "NotFound"
else:
print "Correct"
但这似乎并不正确。正如我所输入的字典NotFound
"{'RSA':{}}"
,即使它是Dictionaries =
{
'A':{}'B':{}, 'C':{}, 'D':{}, 'myWorld' : {'id':1, 'name': 10},
{'id':2, 'name': 20},
{'id':3, 'name': 30},
{'id':4, 'name': 40},
{'id':5, 'name': 50}
}
。我是python的新手,所以不太了解它。任何人都可以告诉我哪里出错了以及如何解决它?
tests
我与classes
一起运行A, b, C, D, myWorld
。
classes
mytest.py "{'A':{}}"
在这里。
我像mytest.py "{'myWorld' : {'id':1, 'name': 10}}"
一样运行我的测试
mytest.py "{'myWorld' : {'id':2, 'name': 20}}"
或
mytest.py
因此我用l = ast.literal_eval(args[0])
输入的论点,我将其保存在l中。
其中if all(key in Dictionaries and Dictionaries[key] == key and value for key, value in l.iteritems()):
proceed
else:
exit(1)
现在,当我不想运行不必要的测试时,我正在做
mytest.py 'myWorld' : {'id':1, 'name': 12}
现在有了这里给出的if语句的建议,它总是变为真,我总是在键和值的错误组合的情况下继续。
即使我做Dictionaries
我不想要那个。我希望它仅针对{{1}}
中提到的可能性运行答案 0 :(得分:1)
一种方式:
if all(key in World and World[key] == value for key, value in myWorld.iteritems()):
print "Correct"
else:
print "NotFound"
这对值使用简单的相等 - 如果你需要一些不同的东西,例如你的嵌套'Mumbai'
字典它不应该太难以适应,只需改变你比较的方式value
答案 1 :(得分:0)
myWorld == World
这会奏效。
更新:
if myWorld == World:
print 'correct'
else:
print 'not found'
答案 2 :(得分:0)
这原则上应该做你想要的:
world_items = world.items()
if all(it in world_items for it in myWorld.iteritems()):
print 'correct'
else:
print 'not correct'
答案 3 :(得分:0)
您还可以将字典与这些字典进行比较:
notthesame_item = set(myWorld.items()) ^ set(World.items())
print len(notthesame_item) # should be 0
当两个字母中的字符串相同时,XOR运算符(^)将消除字典中的所有元素。
thesame_items = set(myWorld.items()) & set(World.items())
print len(thesame_items)
将显示两个词典中的匹配元素。