python – 如何通过值来区分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}

这是我做的:

# 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
上一篇:在JavaScript中复制数组的最快方法 – 切片与’for’循环


下一篇:python – 如何在列表中找到重复项并使用它们创建另一个列表?