比较列表python中的字典

时间:2017-07-14 15:57:52

标签: python list dictionary compare keyvaluepair

我有两个嵌套字典列表:

list1 = [{u'Key': u'lm_app', u'Value': u'lm_app'}, {u'Key': u'Name', u'Value': u'new Name'}, {u'Key': u'lm_sbu', u'Value': u'lm_sbu'}, {u'Key': u'lm_app_env', u'Value': u'lm_app_env'}]

list 2 = [{u'Key': 'lm_sbu', u'Value': 'lm_sbu'}, {u'Key': 'Name', u'Value': 'test'}]

如何检查列表2中列表1中的键是否存在?

关于这个例子,密钥'lm_sbu'和'Name'都存在于列表1和列表2中。但是,密钥'lm_app'和'lm_app_env'存在于列表1中但不在列表2中。< / p>

一旦我发现了差异,我想在不同的列表中附加差异。

由于

3 个答案:

答案 0 :(得分:1)

您实际上是在检查值(而不是键)之间的差异,在这种情况下,您可以将list1中字典值的设置差异与list2中的字典值进行设置差异:

s = {v for d in list1 for v in d.values()}.difference(*[d.values() for d in list2])
print s
# set([u'new Name', u'lm_app', u'lm_app_env'])

答案 1 :(得分:0)

这样的东西,包含您在项目列表中搜索的项目。使用库有更短的方法,但我喜欢vanilla python。

DocumentId

答案 2 :(得分:0)

Python集有助于此:

list1 = [{u'Key': u'lm_app', u'Value': u'lm_app'}, {u'Key': u'Name', u'Value': u'new Name'}, {u'Key': u'lm_sbu', u'Value': u'lm_sbu'}, {u'Key': u'lm_app_env', u'Value': u'lm_app_env'}]
list2 = [{u'Key': 'lm_sbu', u'Value': 'lm_sbu'}, {u'Key': 'Name', u'Value': 'test'}]

list1_keys = {dictionary['Key'] for dictionary in list1}
list2_keys = {dictionary['Key'] for dictionary in list2}

print 'Keys in list 1, but not list 2: {}'.format(list(list1_keys - list2_keys))
print 'Keys in list 2, but not list 1: {}'.format(list(list2_keys - list1_keys))

输出:

Keys in list 1, but not list 2: [u'lm_app', u'lm_app_env']
Keys in list 2, but not list 1: []