Skip to content

Latest commit

 

History

History
52 lines (36 loc) · 1.43 KB

1.9.两个字典中相同的Key-Value查询.md

File metadata and controls

52 lines (36 loc) · 1.43 KB

1.9.两个字典中相同的Key-Value查询

问题

有两个字典,你想知道它们那些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。