如何比较2个词典?

时间:2014-08-22 16:32:20

标签: python if-statement for-loop dictionary compare

我正在输入一个字典,可能是:

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, myWorldclasses 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}}

中提到的可能性运行

4 个答案:

答案 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)

将显示两个词典中的匹配元素。