我想在dict中使用唯一的重复值。它看起来像这样:
d = {
"a":1,
"b":2,
"c":2,
"d":3,
"e":4,
"f":5,
"g":1,
"h":2,
"i":2,
"j":1,
"k":1}
这是我做的:
# sort and unique the dict values
obj = d.values()
K = []
K = sorted(list(zip(*[(x,K.append(x)) for x in obj if not x in K])[0]
V=[]
for v1 in L:
V.append([k for k, v in obj.iteritems() if v == v1][0])
d_out = dict(zip(K, V))
1。 那么,K,V会是正确的顺序吗? 此外,它可能有点复杂,任何人都可以通过它的值给出一个简单的独特字典解决方案吗?
2。 以下可以更简单吗?
for v1 in L:
V.append([k for k, v in obj.iteritems() if v == v1][0])
这不适用于我的测试:
[V.append([k for k, v in obj.iteritems() if v == v1][0]) for v1 in L]
3。 我意识到我可以使用交换键值来实现(通过其值唯一的dict),但我不知道如何在交换时导致与此键发生冲突时选择密钥:
dict((value, key) for key, value in my_dict.iteritems())
我知道如果再次交换,该值将是唯一的,但是,这只会在发生密钥冲突时覆盖密钥,从而无法进行选择。我感到困惑,为什么这没有给出密钥冲突错误?我可以做一些事情来选择旁边丑陋的方式来覆盖新的字典的密钥吗?
4。 我搜索并发现python dict的一些“None”值得到了很好的讨论,任何人都可以给我一个示例,它将用于什么以及它在使用python dict时会受到什么影响?
答案 0 :(得分:3)
答案 1 :(得分:2)
try it out:
from collections import defaultdict
dout = defaultdict(dict)
for k,v in d.iteritems():
dout[v] = k
dout = dict(dout)
fdict = dict(zip(dout.values(), dout.keys()))
N.B:字典没有重复键,因此输入字典没有重复键 希望它会起作用
答案 2 :(得分:1)