从列表中删除重复项,该列表在字典中用作值

时间:2014-12-09 19:57:57

标签: python list dictionary unique-values

我有一个字典,其值为列表。我想从此列表中删除重复项。

{(2,): ['a', 'a', 'b', 'b'], (3,): ['c', 'c'], (1,): ['a', 'b', 'b'], (4,): ['b', 'c', 'd']}

此词典应返回{2:[' a',' b'],1:[' a'' b' ],4(' b',' c'' d')}。我只能在创建或合并字典时找到答案。在我的情况下,由于多个输入作为列表,它将无法工作。有没有办法改变原始代码或添加一些东西,以获得没有重复的字典?我得到这本词典的原始代码如下。

from itertools import izip

a = [1,1,1,2,2,2,2,3,3,4,4,4]
b = ['a','b','b','a','a','b','b','c','c','b','c','d']

d = {} # Create dictionary

def solve(*lists):  

    for i, k in enumerate(izip(*lists)): # check and returns an iterator that combines the elements of lists into tuples
        global d                         
        d.setdefault(k, []).append(b[i])
         #If key is in the dictionary, return its value and append item from other list in the same position 
    return d      

solve(a)
print d

我是Python的初学者,所以任何帮助都将受到高度赞赏。我找到的最接近的答案是Python remove duplicate value in a combined dictionary's list,但由于输入是词典而不是列表,我无法弄清楚该怎么做。

研究视角的目的:

我有一份CAD图纸和分配给他们的信件清单(这是清单b)。列表a是真实对象的列表,并为它们分配了编号。如果相同的图纸和对象在数据库中重复,那就没问题。问题是当两个图纸分配给一个对象时。在我的情况下,如果两个列表中相同位置的项目重复它不是问题。 3c只是一个不会引起问题的重复。从我的研究中可以忽略3c。 3c是一种情况,我们有两个相同的对象和两个相同的图,所以没有冲突。 ' 2'是分配给真实对象的数字,' a'是一封绘画的信。问题是当有一个真实对象和两个不同的绘图分配给同一个对象时。它会导致零件生产出错。 (2,a),(2,b)是一个问题。

2 个答案:

答案 0 :(得分:1)

您可以使用set

>>> d={(2,): ['a', 'a', 'b', 'b'], (3,): ['c', 'c'], (1,): ['a', 'b', 'b'], (4,): ['b', 'c', 'd']}
>>> {i:list(set(v)) for i,v in d.items()}
{(2,): ['a', 'b'], (3,): ['c'], (1,): ['a', 'b'], (4,): ['c', 'b', 'd']}

答案 1 :(得分:1)

dic = {(2,): ['a', 'a', 'b', 'b'], (3,): ['c', 'c'], (1,): ['a', 'b', 'b'], (4,): ['b', 'c', 'd']}

for i in dic:
    dic[i] = list(set(dic[i]))

你得到了

>>> 
{(2,): ['b', 'a'], (3,): ['c'], (1,): ['b', 'a'], (4,): ['d', 'b', 'c']}
>>> 

这是因为我们首先将其转换为集合,然后将其转换为列表,并在此过程中删除重复项。