我有一个字典,其值为列表。我想从此列表中删除重复项。
{(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)是一个问题。
答案 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']}
>>>
这是因为我们首先将其转换为集合,然后将其转换为列表,并在此过程中删除重复项。