FaC*_*fee 2 python dictionary dictionary-comprehension
鉴于此命令numpy.ndarray:
d={0: np.array([[ 9.81650352, 10.03896523, 10.26972675], [11.76386738,
11.76718712, 11.63769531]]),
1: np.array([[ 13.33630352, 29.17866523, 17.1005102675], [41.98976738,
6.44368712, 2.11764771]])}
Run Code Online (Sandbox Code Playgroud)
以下门槛:
t=10
Run Code Online (Sandbox Code Playgroud)
1如果d中的每个浮点值都是>=t,0那么我想要一个新的dict,如果是的话<t.我的尝试
newd={k:[[1]] or [[0]] for k,[[v]] in d if [[v]]>=t}
Run Code Online (Sandbox Code Playgroud)
收益:
Traceback (most recent call last):
File "<ipython-input-152-68383ed9ad79>", line 1, in <module>
newd={k:[[1]] or [[0]] for k,[[v]] in d if [[v]]>=17}
File "<ipython-input-152-68383ed9ad79>", line 1, in <dictcomp>
newd={k:[[1]] or [[0]] for k,[[v]] in d if [[v]]>=17}
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我应该如何"改写"我的片段?
在这个例子中,预期的结果是:
newd={0: np.array([[ 0, 1, 1], [1, 1, 1]]),
1: np.array([[ 1, 1, 1], [1, 0, 0]])}
Run Code Online (Sandbox Code Playgroud)
您可以使用np.where:
>>> new_d = {k:np.where(v >= 10, 1, 0) for k, v in d.iteritems()}
>>> {0: array([[0, 1, 1],[1, 1, 1]]), 1: array([[1, 1, 1], [1, 0, 0]])}
Run Code Online (Sandbox Code Playgroud)
该np.where方法将条件作为第一个参数和两个值x和y.如果同时指定了x和y,则输出数组包含x的元素,其中condition为True,其他元素来自y