我有两个嵌套字典列表:
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>
一旦我发现了差异,我想在不同的列表中附加差异。
由于
答案 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: []