<p>我会建立一个反向索引:</p>
<pre><code>from collections import defaultdict
reverse = defaultdict(set)
for key, values in dct.items():
for value in values:
reverse[value].add(key)
</code></pre>
<p>现在可以找到键之间共享的任何值:</p>
<pre><code>for value, keys in reverse.items():
if len(keys) > 1:
print(value, keys)
</code></pre>
<p>演示:</p>
<pre><code>>>> from collections import defaultdict
>>> dct = {'a': ['Menny','Adam'], 'b': ['Steff','Bentz', 'Arik'], 'c': ['Menny','Stephonich', 'Marry', 'Kenny', 'Mike', 'Pring']}
>>> reverse = defaultdict(set)
>>> for key, values in dct.items():
... for value in values:
... reverse[value].add(key)
...
>>> for value, keys in reverse.items():
... if len(keys) > 1:
... print(value, keys)
...
Menny {'c', 'a'}
</code></pre>
<p>如果要测试两个键,请使用:</p>
<pre><code>def check_keys(dct, key1, key2):
return not set(dct[key1]).isdisjoint(dct[key2])
</code></pre>
<p>演示:</p>
<pre><code>>>> check_keys(dct, 'a', 'c')
True
>>> check_keys(dct, 'a', 'b')
False
</code></pre>
<p>或者,返回公共值:</p>
<pre><code>def values_intersection(dct, key1, key2):
return set(dct[key1]).intersection(dct[key2])
</code></pre>
<p>演示:</p>
<pre><code>>>> values_intersection(dct, 'a', 'c')
{'Menny'}
>>> values_intersection(dct, 'a', 'b')
set()
</code></pre>