多维词典理解
Multidimensional dictionary comprehension
假设我有这样的字典:
d = {key1: [1,2,3], key2: [4,6,7]}
如果我想要一个字典,从值中减去相应数组的平均值,我可以这样做:
new_d = {key: x - np.mean(x) for (key,x) in d.items()}
现在说我的字典实际上是这样的:
d = {key1: [[1,2,3], [10,100,1000]], key2: [[4,5,6], [11,12,16]]}
在这种情况下字典理解如何工作?
结果应如下所示:
new_d = {key1: [[-1, 0, 1], [-360, -270, 630]], key2: [[-1, 0, 1], [-2, -1, 3]]}
感谢您的帮助!
根据您的一维解决方案,您只需要一个嵌套列表理解:
>>> {key: [y-np.mean(y) for y in x] for key,x in d.items()}
{'key1': [array([-1., 0., 1.]), array([-360., -270., 630.])],
'key2': [array([-1., 0., 1.]), array([-2., -1., 3.])]}
但是如果您想要完全您使用惯用的 NumPy 编写的输出,则有点不同:
- 指定 int 数据类型
- 取各行的平均值
- Convert back to list
>>> {key: (x - np.mean(x, axis=1, keepdims=True, dtype='int')).tolist()
... for key,x in d.items()}
{'key1': [[-1, 0, 1], [-360, -270, 630]],
'key2': [[-1, 0, 1], [-2, -1, 3]]}
使用与您相同的理解方式,为子列表增加一级:
new_d = {key: [x - np.mean(x) for x in l] for (key,l) in d.items()}
如列表:
{key: [(x - np.mean(x)).tolist() for x in l] for (key,l) in d.items()}
输出:
{'key1': [[-1.0, 0.0, 1.0], [-360.0, -270.0, 630.0]],
'key2': [[-1.0, 0.0, 1.0], [-2.0, -1.0, 3.0]]}
假设我有这样的字典:
d = {key1: [1,2,3], key2: [4,6,7]}
如果我想要一个字典,从值中减去相应数组的平均值,我可以这样做:
new_d = {key: x - np.mean(x) for (key,x) in d.items()}
现在说我的字典实际上是这样的:
d = {key1: [[1,2,3], [10,100,1000]], key2: [[4,5,6], [11,12,16]]}
在这种情况下字典理解如何工作?
结果应如下所示:
new_d = {key1: [[-1, 0, 1], [-360, -270, 630]], key2: [[-1, 0, 1], [-2, -1, 3]]}
感谢您的帮助!
根据您的一维解决方案,您只需要一个嵌套列表理解:
>>> {key: [y-np.mean(y) for y in x] for key,x in d.items()}
{'key1': [array([-1., 0., 1.]), array([-360., -270., 630.])],
'key2': [array([-1., 0., 1.]), array([-2., -1., 3.])]}
但是如果您想要完全您使用惯用的 NumPy 编写的输出,则有点不同:
- 指定 int 数据类型
- 取各行的平均值
- Convert back to list
>>> {key: (x - np.mean(x, axis=1, keepdims=True, dtype='int')).tolist()
... for key,x in d.items()}
{'key1': [[-1, 0, 1], [-360, -270, 630]],
'key2': [[-1, 0, 1], [-2, -1, 3]]}
使用与您相同的理解方式,为子列表增加一级:
new_d = {key: [x - np.mean(x) for x in l] for (key,l) in d.items()}
如列表:
{key: [(x - np.mean(x)).tolist() for x in l] for (key,l) in d.items()}
输出:
{'key1': [[-1.0, 0.0, 1.0], [-360.0, -270.0, 630.0]],
'key2': [[-1.0, 0.0, 1.0], [-2.0, -1.0, 3.0]]}