如何在python字典中检索给定键(类型为PosixPath)的值?
我有一个python字典,其中包含PosixPath类型的键和tensor类型的值,如下所示:如何在python字典中检索给定键(类型为PosixPath)的值?,python,Python,我有一个python字典,其中包含PosixPath类型的键和tensor类型的值,如下所示: {PosixPath('dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif'): tensor(0.0053), PosixPath('dataset_small/test/b1762960a3b92ecc055ce06897378f42bf337c82.tif'): tensor(0.0498), PosixPath('da
{PosixPath('dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif'): tensor(0.0053),
PosixPath('dataset_small/test/b1762960a3b92ecc055ce06897378f42bf337c82.tif'): tensor(0.0498),
PosixPath('dataset_small/test/61416795264535918f705f2c93bfd532d23ee8da.tif'): tensor(0.0223),
...
我怎样索引这本词典
我尝试了一些_dict['dataset\u small/test/'+id+'.tif',但出现以下错误:
KeyError
Traceback (most recent call last)
<ipython-input-69-d7a2e0e6db0f> in <module>()
----> 1 pred_list_cor = [pred_dict['dataset_small/test/' + id + '.tif'] for id in sample_list]
<ipython-input-69-d7a2e0e6db0f> in <listcomp>(.0)
----> 1 pred_list_cor = [pred_dict['dataset_small/test/' + id + '.tif'] for id in sample_list]
KeyError: 'dataset_small/test/0b2ea2a822ad23fdb1b5dd26653da899fbd2c0d5.tif'```.
在将字符串用作键之前,必须将其转换为PosixPath
key = PosixPath("dataset_small/test/0b2ea2a822ad23fdb1b5dd26653da899fbd2c0d5.tif")
value = some_dict[key]
用于测试的示例代码
from pathlib import PosixPath
data = {
PosixPath('dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif'): 0.0053,
PosixPath('dataset_small/test/b1762960a3b92ecc055ce06897378f42bf337c82.tif'): 0.0498,
PosixPath('dataset_small/test/61416795264535918f705f2c93bfd532d23ee8da.tif'): 0.0223
}
print( data[PosixPath('dataset_small/test/61416795264535918f705f2c93bfd532d23ee8da.tif')] )
# 0.0223
这是一个有趣的问题,我以前从未尝试过。我试图使用:value=some_dict[key]直接访问密钥,正如前面的答案所建议的那样,但对我来说不起作用,我发现您需要在类中定义两个方法才能使其工作:hash和eq,这要感谢: 如果一个对象的哈希值在其生存期内从未改变,则该对象是可哈希的。它需要一个哈希方法,并且可以与它需要一个eq方法的其他对象进行比较。比较相等的可散列对象必须具有相同的散列值。 更新:我只是注意到PosixPath是一个预定义的模块。我认为这是您创建的一个新类:。我想答案还是有用的 代码: 结果:
from pathlib import PosixPath
data = {
PosixPath('dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif'): 0.0053,
PosixPath('dataset_small/test/b1762960a3b92ecc055ce06897378f42bf337c82.tif'): 0.0498,
PosixPath('dataset_small/test/61416795264535918f705f2c93bfd532d23ee8da.tif'): 0.0223
}
print( data[PosixPath('dataset_small/test/61416795264535918f705f2c93bfd532d23ee8da.tif')] )
# 0.0223
class PosixPath:
def __init__(self, text):
self.text = text
def __hash__(self):
return hash((self.text))
def __eq__(self, other):
return (self.text) == (other.text)
class tensor:
def __init__(self, value):
self.value = value
dic = {PosixPath('dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif'): tensor(0.0053)}
search = "dataset_small/test/1db4b7f3f65739960cb553b8778982e7e6129e0d.tif"
new = PosixPath(search)
dic[new].value
0.0053