Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python字典中检索给定键(类型为PosixPath)的值?_Python - Fatal编程技术网

如何在python字典中检索给定键(类型为PosixPath)的值?

如何在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

我有一个python字典,其中包含PosixPath类型的键和tensor类型的值,如下所示:

{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