这是我的n项词典。
{
"proceed": [[6,46] , [7,67], [12,217], [67,562], [67,89]],
"concluded": [[6,46] , [783,123], [121,521], [67,12351], [67,12351]],
...
}
想象一下字典s.t.就像n键和二维数组的项目一样。
我想拦截所有这些并将结果视为[6,46]
我试过了。那样:
result=set.intersection(*map(set,output.values()))
然而由于项目是两个维度的数组它有错误。
有人可以帮我怎么做?
感谢。
答案 0 :(得分:3)
所以......集合不适用于列表,因为列表不是hashable。相反,你必须像set
这样tuple
这样做:{/ p>
result = set.intersection(*({tuple(p) for p in v} for v in output.values()))
编辑:适用于py版本> = 2.7
答案 1 :(得分:0)
完全同意@FHTMitchell的回答,但是这里有一些更多的解释,举例说明为什么你不能通过列表获得唯一的设置并得到TypeError: unhashable type
考虑以下值:
x = {'concluded': [[6, 46], [783, 123], [121, 521], [67, 12351], [67, 12351]],
'proceed': [[6, 46], [7, 1], [12, 217], [67, 562], [67, 89]]}
y = {'concluded': ((6, 46), (67, 12351), (121, 521), (783, 123)),
'proceed': ((6, 46), (7, 1), (12, 217), (67, 89), (67, 562))}
x是包含列表列表作为值的字典;要注意的主要是键的值存储为可变的列表;但是,它是元组的元组,或者你可以将它保持为不可变的集合
现在考虑一些你如何设法得到你的欲望输出[6,46],但是如果你注意到它的列表包含一些存储在列表中的元素,那么如果你改变如下的值:
x['proceed'][0][0] = 9
它会在[6, 46]
键中将您的值[9,46]
更改为concluded
,现在您的输出可能会也可能不会更改,具体取决于您如何迭代和存储它。