我有这样的字典:
{0: [3406, 3076, 3470], 1: [3792, 3076, 3470], 2: [3470, 3076, 3406], 3: [3792, 3470, 3406], 4: [3470, 3292, 3406], 6: [3792, 3406, 3470]}
你可以理解0和2不相等但共享相同的元素,我想删除字典中相同的这些元素。在这种情况下,它将减少为:
{0: [3406, 3076, 3470], 1: [3792, 3076, 3470], 2: [3792, 3470, 3406], 3: [3470, 3292, 3406]}
编辑:
aux = 0 definitivo = {}
表示key1,result.items()中的值1:
for key2, value2 in result.items():
if key1!=key2:
if len(list(set(value1).intersection(value2)))==3:
definitivo[aux]=value1
aux = aux+1
打印(definitivo)
我试图得到交叉点为3的那些,然后消除它们。但它没有用。
答案 0 :(得分:0)
您可以将每个列表转换为frozenset
。这样,您可以将该集用作dict键,任何出现两次的集都将被覆盖:
>>> data = {0: [3406, 3076, 3470], 1: [3792, 3076, 3470], 2: [3470, 3076, 3406], 3: [3792, 3470, 3406], 4: [3470, 3292, 3406], 6: [3792, 3406, 3470]}
>>> uniq = {frozenset(l):k for k,l in data.items()}
{frozenset({3470, 3076, 3406}): 2, frozenset({3792, 3076, 3470}): 1, frozenset({3792, 3406, 3470}): 6, frozenset({3406, 3292, 3470}): 4}
您可以反转这些对并将这些集转换回列表:
>>> {i:list(s) for s,i in uniq.items()}
{2: [3470, 3076, 3406], 1: [3792, 3076, 3470], 6: [3792, 3406, 3470], 4: [3406, 3292, 3470]}
请注意,由于原始数据是dict,因此无法保留键顺序,而dict在Python中是无序的。
答案 1 :(得分:0)
识别相同唯一值的另一种简单方法如下:
注意:这是算法
for key1,value1 in dict: for key2,value2 in dict: if key1 != key2 and value1.sort()==value2.sort(): del dict['key2']
答案 2 :(得分:0)
将dict的值更改为元组,对其进行排序并将其存储在另一个查找字典中。检查查找中是否存在每个新值,然后过滤掉已存在的值。
data = {0: [3406, 3076, 3470], 1: [3792, 3076, 3470], 2: [3470, 3076, 3406], 3: [3792, 3470, 3406], 4: [3470, 3292, 3406], 6: [3792, 3406, 3470]}
lookup = dict()
i = 0
filter_data = dict()
for k in data:
value = tuple(sorted(data[k]))
if value not in lookup:
lookup[value] = 1
filter_data[i] = data[k]
i = i + 1
print (filter_data)