我有一个字典的字典,即 dict[key1][key2] 应该返回一个数字。 如果我在 dict[key1] 中执行 key2 这将返回 True,但是 dict[key1].get(key2) 返回 None.
我想我在这里缺少一些非常基本的东西,但我被困住了。
因为 key1 是一个 string,而 key2 是一个 numpy.datetime64。
编辑:
key type: <type 'numpy.datetime64'>
key: 2014-08-11T02:00:00.000000+0200
Dict: {numpy.datetime64('2014-08-11T02:00:00.000000000+0200'): 1}
key in dict.keys() True
dict.items(): [(numpy.datetime64('2014-08-11T02:00:00.000000000+0200'), 1)]
dict.get(key): None
编辑 2:
由编辑 3 替换
编辑 3(替换编辑 2):
代码:
vessel = df['Vessel'].iloc[0]
print "vessel:",vessel
ati = np.datetime64(df['ATI'].iloc[0])
print "ati type:",type(ati),"value:",ati
print "Self.sailing[vessel]:",self.sailing[vessel]
print "key in dict.keys():",ati in self.sailing[vessel].keys()
sailing = self.sailing[vessel].get(ati)
print "sailing:", sailing
print "dict[key]:",self.sailing[vessel][ati]
输出:
vessel: VESSEL2
ati type: <type 'numpy.datetime64'> value: 2014-07-21T02:00:00.000000+0200
Self.sailing[vessel]: {numpy.datetime64('2014-07-21T02:00:00.000000000+0200'): 1}
key in dict.keys(): True
sailing: None
dict[key]:
Traceback (most recent call last):
File "C:/dev/python/bmw_vpc/src/vpc_data_extractor.py", line 9, in <module>
data.create_master_file()
File "C:\dev\python\bmw_vpc\src\process.py", line 112, in create_master_file
print "dict[key]:",self.sailing[vessel][ati]
KeyError: numpy.datetime64('2014-07-21T02:00:00.000000+0200')
编辑 4:
代码:
for key in self.sailing[vessel].keys():
print "Vessel:",vessel,"ati:",ati,"ati == key:",ati == key
sailing = self.sailing[vessel].get(ati)
print "Vessel:",vessel,"sailing:", sailing
输出:
Vessel: VESSEL2 ati: 2014-07-21T02:00:00.000000+0200 ati == key: True
Vessel: VESSEL2 sailing: None
编辑 5:
感谢@jamylak 的回答,我使用时间戳而不是 datetime64 对象做了一个解决方法。
请您参考如下方法:
根据您提供的信息,唯一的选择是 key2 存在于 dict[key1] 中,并且 key2 的值为 无
编辑:
它们是 2 个完全不同的对象,但恰好看起来像完全相同的对象。
从你的代码中有:
numpy.datetime64('2014-07-21T02:00:00.000000+0200')
和
numpy.datetime64('2014-07-21T02:00:00.000000000+0200')
>>> (hash(numpy.datetime64('2014-07-21T02:00:00.000000000+0200'))
== hash(numpy.datetime64('2014-07-21T02:00:00.000000+0200')))
False
之所以这样,是因为当您检查 in dict.keys() 时,它会对 中的每个元素进行相等检查 ( 由 ==) list.keys() 方法和
numpy.datetime64('2014-07-21T02:00:00.000000000+0200') == numpy.datetime64('2014-07-21T02:00:00.000000+0200')
如果您尝试运行 key in dict,它将返回 False,因为它不会构建中间 list 而是使用 hash
它们是字典的不同对象,因为字典使用的是 hash,这就是 in dict.keys() 不起作用的原因。
.get 也没有找到它,因为它返回None,您可以将默认的None更改为其他东西可以证明这一点。
至于为什么它们比较相等而具有不同的hash,我认为是某种错误。
