我想在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的一些“无”值很好地讨论,任何人都可以给我一个样本它用于什么以及它将在使用python dict时会受到什么影响?
解决方法:
> dict不是序列.没有订购.
>您需要一种更简单的整体方法.
> dict没有给出“关键冲突错误”.它假定您要使用新值覆盖旧值.
>我不明白你在这里问的是什么.
下面的解决方案是从字典中删除重写值的更直接的方法.调整排序或插入循环以控制哪些键应出现在最终的dict中.
d = {
"a":1,
"b":2,
"c":2,
"d":3,
"e":4,
"f":5,
"g":1,
"h":2,
"i":2,
"j":1,
"k":1}
# Extract the dictionary into a list of (key, value) tuples.
t = [(k, d[k]) for k in d]
# Sort the list -- by default it will sort by the key since it is
# first in the tuple.
t.sort()
# Reset the dictionary so it is ready to hold the new dataset.
d = {}
# Load key-values into the dictionary. Only the first value will be
# stored.
for k, v in t:
if v in d.values():
continue
d[k] = v
print d