0

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

{(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) 是个问题。

4

2 回答 2

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']}
于 2014-12-09T20:01:03.917 回答
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']}
>>> 

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

于 2014-12-09T20:04:19.510 回答