有没有一种方法可以只使用特定的键值对循环遍历python字典?

有没有一种方法可以只使用特定的键值对循环遍历python字典?,python,dictionary,for-loop,if-statement,key-value,Python,Dictionary,For Loop,If Statement,Key Value,我对Python+dictionary对象不是很有经验,所以我认为我可能试图以错误的方式执行此任务 目标是在数据库中搜索具有特定文件类型的文件,然后返回文件名中缺少字符串的文件。这些文件是可以通过扫描访问的dict对象(也是dict对象),这些扫描可以通过会话访问(也是dict对象!) 我正在通过一个会话的扫描循环进行测试,这就是当前的工作原理: for scan in session_data[1539].scans.values(): for file in scan.files.v

我对Python+dictionary对象不是很有经验,所以我认为我可能试图以错误的方式执行此任务

目标是在数据库中搜索具有特定文件类型的文件,然后返回文件名中缺少字符串的文件。这些文件是可以通过扫描访问的dict对象(也是dict对象),这些扫描可以通过会话访问(也是dict对象!)

我正在通过一个会话的扫描循环进行测试,这就是当前的工作原理:

for scan in session_data[1539].scans.values():
    for file in scan.files.values():
        if file.file_format == "NIFTI" and "*input_*" not in file._cache['id']:
            print(scan)
            print(file)
问题是:对于我感兴趣的每一个类型的文件,都有数千个不同文件类型的文件在循环中,我对这些文件不感兴趣,这会使过程变慢,当我在所有会话中添加循环时,这种方法将不起作用。是否有某种方法可以让我只循环使用file_格式的文件:NIFTI,而忽略其他文件?类似这样的东西(但是功能性的,lol):

以下是文件字典的属性和方法:

print(dir(scan_data[1].files[1]))
['SECONDARY_LOOKUP_FIELD', '_CONTAINED_IN', '_DISPLAY_IDENTIFIER', '_HAS_FIELDS', '_XSI_TYPE', '__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '__xsi_type__', '_abc_impl', '_cache', '_caching', '_fieldname', '_fields', '_overwrites', '_parent', '_path', '_uri', '_xnat_session', 'caching', 'cat_id', 'clearcache', 'collection', 'data', 'del_', 'delete', 'digest', 'download', 'download_stream', 'external_uri', 'fieldname', 'file_content', 'file_format', 'file_size', 'file_tags', 'full_data', 'fulldata', 'fulluri', 'get', 'get_object', 'id', 'logger', 'mset', 'open', 'parent', 'path', 'query', 'set', 'size', 'uri', 'xnat_session', 'xpath']

谢谢:)

有没有办法检索每个文件的反文件名?如果是这样,您可以使用Python的
endswith()
函数。据我所知,对于字典数据结构,您必须访问每个值以检查它是否等于
NIFTI
。对于任何不预处理集合的方法,都有相同的观察结果——您必须访问每个字符串以执行比较。一个简单的修复方法可能是,如果您有足够的内存,可以使用多个线程并行执行此操作。@DiegoHernandezHerrera\u cache['id']提供了文件名,但我不确定这将如何帮助我避免循环遍历每个文件?@Sophie我将给您一个示例。如果
text=“something.txt”
print(text.endswith('.txt'))
将返回
True
。同样,如果任何文件名以.nii结尾或NIFTI文件使用的任何后缀结尾,您可以使用
endswith()
函数进行检查。@Unni感谢您的反馈,我将研究并行操作:)
print(dir(scan_data[1].files[1]))
['SECONDARY_LOOKUP_FIELD', '_CONTAINED_IN', '_DISPLAY_IDENTIFIER', '_HAS_FIELDS', '_XSI_TYPE', '__abstractmethods__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '__xsi_type__', '_abc_impl', '_cache', '_caching', '_fieldname', '_fields', '_overwrites', '_parent', '_path', '_uri', '_xnat_session', 'caching', 'cat_id', 'clearcache', 'collection', 'data', 'del_', 'delete', 'digest', 'download', 'download_stream', 'external_uri', 'fieldname', 'file_content', 'file_format', 'file_size', 'file_tags', 'full_data', 'fulldata', 'fulluri', 'get', 'get_object', 'id', 'logger', 'mset', 'open', 'parent', 'path', 'query', 'set', 'size', 'uri', 'xnat_session', 'xpath']