如何将项目列表与字典中的键进行匹配?

How can I match a list of items against keys in a dictionary?

这看起来很简单,但我不知道哪里出了问题。

首先,我收集了目录中与特定字符串匹配的所有文件名的列表:

import os
import glob
dl = glob.glob('dir/*abc*')
for f in dl:
    fn = os.path.basename(f)

所以现在我有一个文件名列表 fn,其中包含 "abc"。目前一切顺利。

我想做的是遍历这个文件名列表,尝试将它们与字典中的一组键进行匹配,并在匹配的地方打印出该匹配键的相应字典值。

这是我所做的:

fn_dict = {"abc.txt": "val1", "abc123.txt": "val2", "def.txt": "val3"}
for i in fn:
    if i in fn_dict.keys():
        print(fn_dict.get(i))
    else:
        print("No match")

我希望能得到 "val1""val2" 但我却一次又一次地得到 "No match"

fn 应该是一个列表,否则它将是您将通过单个文件名而不是目录中与模式匹配的所有文件名循环的字符串和字典部分

import os
import glob
dl = glob.glob('dir/*abc*')
fn = []
for f in dl:
    fn.append(os.path.basename(f))

或使用列表理解

fn = [os.path.basename(f) for f in dl]

在你的 for 循环中你重新分配给你 fn 变量

for f in dl:
    fn = os.path.basename(f) # fn is string now, not a list

然后在第二个 for 循环中遍历 fn 变量,它是一个字符串,因此创建一个数组并将 os.path.basename(i) 添加到其中

fn = []
for f in dl:
    fn.append(os.path.basename(f))