问题
有两个字典,你想知道它们那些key-value是相同的。
解决方法
比如有以下两个字典:
a = {
'x' : 1,
'y' : 2,
'z' : 3
}
b = {
'w' : 10,
'x' : 11,
'y' : 2
}
可使用keys()
或者items()
方法:
# Find keys in common
a.keys() & b.keys() # { 'x', 'y' }
# Find keys in a that are not in b
a.keys() - b.keys() # { 'z' }
# Find (key,value) pairs in common
a.items() & b.items() # { ('y', 2) }
这些操作也能用于变更或者过滤字典内容,比如你想创建过滤掉某些key的新字典:
# Make a new dictionary with certain keys removed
c = {key:a[key] for key in a.keys() - {'z', 'w'}}
# c is {'x': 1, 'y': 2}
讨论
字典是一系列key-value的映射表。key()
方法返回包含所有key的keys-views对象。它的一点小特性是支持一般的set操作,比如union、intersection、difference。因此,如果你想对字典的key做set操作就不必要再转换了。
items()
方法返回(key, value)
对的items-view对象,它也支持set操作,可用来查找两个字典中相同的key-value对。
尽管看起来相似,但values()
方法不支持set操作,某种程度上讲是因为value不能保证其在字典中的唯一性。这使得某些set操作很是问题。然而如果你定要对values做set操作,你可以先把values转化成set。