JC1*_*C11 5 python floating-point dictionary numpy key
我有一本名为 G 的字典。当我输入 时G. keys (),输出的示例如下:
>>> G.keys ()
[(1490775.0, 12037425.0), (1493775.0, 12042675.0), (1481055.0, 12046305.0), (1503105.0, 12047415.0), (1488585.0, 12050685.0), (1483935.0, 12051405.0),...
Run Code Online (Sandbox Code Playgroud)
当我使用该操作时,key in G结果是错误的。
>>> (1490775.0, 12037425.0) in G
False
Run Code Online (Sandbox Code Playgroud)
为什么我的字典无法识别我的按键?
>>> type (G.keys()[0])
<type 'numpy.void'>
>>> type (G.keys()[0][0])
<type 'numpy.float64'>
>>> type (G.keys()[0][1])
<type 'numpy.float64'>
type(G)
<type 'dict'>
Run Code Online (Sandbox Code Playgroud)
您可能是这样遇到这种情况的:
import numpy as np
arr = np.array([(1490775.0, 12037425.0)], dtype=[('foo','<f8'),('bar','<f8')])
arr.flags.writeable = False
G = dict()
G[arr[0]] = 0
print(type(G.keys()[0]))
# <type 'numpy.void'>
print(type(G.keys()[0][0]))
# <type 'numpy.float64'>
print(type(G.keys()[0][1]))
# <type 'numpy.float64'>
print(type(G))
# <type 'dict'>
Run Code Online (Sandbox Code Playgroud)
浮点元组不是以下的关键G:
print((1490775.0, 12037425.0) in G)
# False
Run Code Online (Sandbox Code Playgroud)
但 numpy.void 实例是关键G:
print(arr[0] in G)
# True
Run Code Online (Sandbox Code Playgroud)
你最好不要使用numpy.voids作为钥匙。相反,如果您确实需要一个字典,那么也许首先将数组转换为列表:
In [173]: arr.tolist()
Out[173]: [(1490775.0, 12037425.0)]
In [174]: G = {item:0 for item in arr.tolist()}
In [175]: G
Out[175]: {(1490775.0, 12037425.0): 0}
In [176]: (1490775.0, 12037425.0) in G
Out[176]: True
Run Code Online (Sandbox Code Playgroud)