假设我有以下numpy.ndarray
:
array([[50, 0, 0],
[ 0, 3, 47],
[ 0, 36, 14]])
如何将其转换为此表格的字典:
{0: {0: 50}, 1: {1: 3, 2: 47}, 2: {1: 36, 2: 14}}
问题类似于python 2d array to dict,但无论我多么努力,我都无法找到与答案相似的解决方案。
答案 0 :(得分:4)
假设a
为您的数组,
试试这个,
{index:{i:j for i,j in enumerate(k) if j} for index,k in enumerate(a)}
结果
{0: {0: 50}, 1: {1: 3, 2: 47}, 2: {1: 36, 2: 14}}
使用以下概念创建的词典:
In [18]: dict([[1,'a'],[2,'b']])
Out[18]: {1: 'a', 2: 'b'}
答案 1 :(得分:2)
您可以使用一对嵌套的for
循环来执行此操作。
内置的enumerate
函数遍历列表或其他可迭代函数,为我们提供项目及其索引。
import numpy as np
a = np.array(
[[50, 0, 0],
[ 0, 3, 47],
[ 0, 36, 14]]
)
d = {}
for i, row in enumerate(a):
temp = {}
for j, v in enumerate(row):
if v:
temp[j] = v
d[i] = temp
print(d)
<强>输出强>
{0: {0: 50}, 1: {1: 3, 2: 47}, 2: {1: 36, 2: 14}}
使用嵌套的词典理解对可以大大缩小:
d = {i: {j: v for j, v in enumerate(row) if v}
for i, row in enumerate(a)}
答案 2 :(得分:1)
只需循环并构建嵌套的dicts
:
import numpy as np
arr = np.array([[50, 0, 0],
[ 0, 3, 47],
[ 0, 36, 14]])
d = {}
for i, row in enumerate(arr):
d[i] = {}
for j, cell in enumerate(row):
if cell != 0:
d[i][j] = cell
答案 3 :(得分:0)
此功能也应适用于二维阵列和一维阵列。另外,只需注释函数的第一行,就可以使它用于int / float列表。
def arrtodict(your_array):
your_array = your_array.tolist()
dict_data = {key: value for key, value in enumerate(your_array)}
if type(dict_data[0]) is list:
for key, value in dict_data.items():
dict_data[key] = {k: v for k, v in enumerate(value)}
elif type(dict_data[0]) is (float or int):
pass
else:
print ('Check Your data')
return dict_data