【发布时间】:2014-12-10 04:26:59
【问题描述】:
我有一本字典,其中包含值作为列表。我想从此列表中删除重复项。
{(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) 是个问题。
【问题讨论】:
-
将
[]替换为set(),将append()替换为add()。 -
列表中的项目顺序重要吗?
-
当我按照你说的做时 (d.setdefault(k, set()).add(b[i]) 我得到 {(2,): set(['a', 'b ']), (3,): set(['c']), (1,): set(['a', 'b']), (4,): set(['c', 'b ', 'd'])} 是否可以删除单词 'set' 和 (3,): set(['c']), ??
-
那是 Python 2 中 set 对象的表示,不用担心。如果出于某种原因(例如索引)最终需要列表,那么最后循环遍历字典并在每个值上调用
list()。 -
谢谢阿什维尼乔杜里
标签: python list dictionary unique-values