gpt4 book ai didi

python - 从字典中提取重复值

转载 作者:太空狗 更新时间:2023-10-30 00:57:17 24 4
gpt4 key购买 nike

我正在尝试找到一种使用 Python 字典删除 Maya 中重复着色器的方法。

这是我正在做的:

我想把所有的maya shader作为键放入一个字典中,并将对应的纹理文件作为值。然后我希望脚本遍历字典并找到任何共享相同值的键并将它们填充到数组或另一个字典中。

这基本上就是我现在所拥有的:

shaders_dict = {'a': somePath, 'b': somePath,
'c': differentPath, 'd': differentPath}

duplicate_shaders_dict = {}`

我现在如何运行该字典来编译另一个看起来像这样的字典:

duplicate_shaders_dict = {'b':somePath, 'd':differentPath }

棘手的部分是,因为存在重复项,我希望脚本跳过原始键,这样它就不会被塞入重复的着色器字典中。

最佳答案

我可能会做这样的事情。首先,制作逆字典:

>>> 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']})

这基本上通过遍历每个键值对并将键附加到与值关联的列表来反转字典。

然后拆分:

>>> first_shaders_dict = {}
>>> duplicate_shaders_dict = {}
>>> for v, ks in inverse_dict.iteritems():
... first, rest = ks[0], ks[1:]
... first_shaders_dict[first] = v
... for r in rest:
... duplicate_shaders_dict[r] = v
...
>>> first_shaders_dict
{'a': 'somePath', 'c': 'differentPath'}
>>> duplicate_shaders_dict
{'b': 'somePath', 'd': 'differentPath'}

嗯。这假设纹理文件是可散列的,因此可以用作字典键。如果他们不是,那么我将不得不解决这个问题。此外,由于 @freespace 指出这里没有排序,如果您想要特定的顺序,我们必须迭代排序的键等。

--

更新:我不太喜欢上面的内容。更短的基于 itertools 的版本:

>>> 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'}

关于python - 从字典中提取重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com