<p>我可能会做这样的事。首先,制作逆字典:</p>
<pre><code>>>> from collections import defaultdict
>>>
>>> shaders_dict = {'a':'somePath', 'b':'somePath', 'c':'differentPath', 'd':'differentPath'}
>>>
>>> inverse_dict = defaultdict(list)
>>> for k,v in shaders_dict.iteritems():
... inverse_dict[v].append(k)
...
>>> inverse_dict
defaultdict(<type 'list'>, {'differentPath': ['c', 'd'], 'somePath': ['a', 'b']})
</code></pre>
<p>这基本上是通过循环每个键、值对并将键附加到与值相关联的列表中来反转字典。在</p>
<p>然后把这个分开:</p>
^{pr2}$
<p>嗯。这假设纹理文件是散列的,因此可以作为字典键。如果他们没有,那我就得解决这个问题。另外,由于@freespace注意到这里没有顺序,如果你想要一个特定的顺序,我们必须迭代排序键或类似的键。在</p>
<p>在</p>
<p>更新:我不太喜欢以上这些。基于itertools的较短版本:</p>
<pre><code>>>> import itertools
>>> shaders_dict = {'a':'somePath', 'b':'somePath', 'c':'differentPath', 'd':'differentPath'}
>>> keys = sorted(sorted(shaders_dict),key=shaders_dict.get)
>>> by_val = [(v, list(ks)) for v, ks in itertools.groupby(keys, shaders_dict.get)]
>>> first_dict = dict((ks[0],v) for v,ks in by_val)
>>> duplicate_dict = dict((k,v) for v,ks in by_val for k in ks[1:])
>>> first_dict
{'a': 'somePath', 'c': 'differentPath'}
>>> duplicate_dict
{'b': 'somePath', 'd': 'differentPath'}
</code></pre>