python 2d数组到dict

python 2d数组到dict,python,arrays,dictionary,numpy,2d,Python,Arrays,Dictionary,Numpy,2d,我想从表示为2d数组的对称矩阵的下三角创建dict。例如,如果numpy数组是 array([[0, 2, 3], [2, 0, 4], [3, 4, 0]]) 然后我想让这本词典看起来像 {('1', '0'): 2, ('2', '0'): 3, ('2', '1'): 4} 向量也有类似的帖子 我对python比较陌生,因此任何帮助/建议都非常感谢。>arr=[[0,2,3], >>> arr =[[0, 2, 3],

我想从表示为2d数组的对称矩阵的下三角创建dict。例如,如果numpy数组是

array([[0, 2, 3],
       [2, 0, 4],
       [3, 4, 0]])
然后我想让这本词典看起来像

{('1', '0'): 2, ('2', '0'): 3, ('2', '1'): 4}
向量也有类似的帖子

我对python比较陌生,因此任何帮助/建议都非常感谢。

>arr=[[0,2,3],
>>> arr =[[0, 2, 3],
          [2, 0, 4],
          [3, 4, 0]]
>>> dict(((j,i), arr[i][j]) for i in range(len(arr)) for j in range(len(arr[0])) if i<j)
{(2, 0): 3, (1, 0): 2, (2, 1): 4}
[2, 0, 4], [3, 4, 0]] >>>dict((j,i),arr[i][j])表示范围内的i(len(arr))表示范围内的j(len(arr[0]),如果i一种方法是使用和

构建将每个值映射到其所有位置的dict:

>>> d = defaultdict(list)
>>> for pos,val in numpy.ndenumerate(a):
...     if val:
...         d[val].append(pos[1])
... 
>>> d
defaultdict(<class 'list'>, {2: [1, 0], 3: [2, 0], 4: [2, 1]})
如果您的python版本不支持dict压缩,那么最后一部分可能是:

>>> dict((tuple(v),k) for k,v in d.iteritems())
{(2, 0): 3, (1, 0): 2, (2, 1): 4}

对不起,错别字了,更正了!@kap:你的Python版本比2.4版本旧吗?啊,等等。答案已经编辑过了。
>>> dict((tuple(v),k) for k,v in d.iteritems())
{(2, 0): 3, (1, 0): 2, (2, 1): 4}