这是一个更好的版本,包括我到目前为止所做的事情:
此词典:sfiles
{'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []}
我要检查sh1
是否在其中:
sh1
u'ASTTOM'
和
sh2
u'ASTIK'
我想将sfiles
中匹配的完整路径分配给sh1。
我做了什么:
for i in list(sfiles):
if shape1 in os.path.basename(i):
print((i))
shape1 = i
这种方法正确吗?如何对sh2有效地做同样的事情?
答案 0 :(得分:1)
据我了解,您想找到什么路径的最后一部分具有sh1(称为shape1)。 因此,您可以这样做:
sfiles = {'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []
}
for pth in sfiles.keys():
if shape1 in pth.split("\\")[-1]:
print(pth)
答案 1 :(得分:0)
对于for i in list(sfiles)
,i
不是列表的索引,而是已经依次分配给每个元素,因此循环必须是:
for i in list(sfiles):
if shape1 in i.split('\\')[-1]:
print(i)
…
我怎样才能有效地对sh2做同样的事情?
定义一个包含循环的函数,并将sh1
或sh2
传递为参数e。 g。:
def matching(shape):
for i in list(sfiles):
if shape in i.split('\\')[-1]:
return i
将匹配的sfile的完整路径分配给sh1
sh1 = matching(sh1)
答案 2 :(得分:0)
您不是真的在使用字典。我建议您重建另一个以文件 name 为键的字典(使用os.path.basename
,而不是str.split
),将完整路径和列表保留为值元组>
import os
data = {'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []}
new_data = {os.path.basename(path): (path,value) for path,value in data.items()}
外观如何:
>>> new_data
{'ASTIK': ('C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK', []),
'ASTTOM': ('C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM', []),
'ROADS': ('C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS', [])}
然后您可以进行O(1)
查找和测试:
shape1 = "ASTIK"
print(shape1 in new_data,new_data.get(shape1))
打印:
True ('C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK', [])
(因为该值在字典中,并且get
检索数据