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

时间:2020-08-08 13:52:05

标签: python python-3.x dictionary lookup

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

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

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"

2 个答案:

答案 0 :(得分:0)

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]

答案 1 :(得分:0)

在您的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))