截取二维数组

时间:2018-03-08 17:20:46

标签: python arrays dictionary interception

这是我的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()))

然而由于项目是两个维度的数组它有错误。

有人可以帮我怎么做?

感谢。

2 个答案:

答案 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,现在您的输出可能会也可能不会更改,具体取决于您如何迭代和存储它。