Python3:检查字典中的关键字是否与字符串的任何部分匹配

时间:2017-07-28 19:52:52

标签: list python-3.x dictionary tuples filenames

我无法将工作代码从列表转换为字典。代码的基础知识检查列表中任何关键字的文件名。

但是我很难理解字典转换它。我试图拉出每个键的名称,并将其与文件名进行比较,就像我对列表和元组所做的那样。这是我正在做的模拟版本。

fname = "../crazyfdsfd/fds/ss/rabbit.txt"
hollow = "SFV"
blank = "2008"
empty = "bender"

# things is list
things = ["sheep", "goat", "rabbit"]
# other is tuple
other = ("sheep", "goat", "rabbit")
#stuff is dictionary
stuff = {"sheep": 2, "goat": 5, "rabbit": 6}

try:
    print(type(things), "things")
    for i in things:
        if i in fname:
        hollow = str(i)
        print(hollow)
        if hollow == things[2]:
            print("PERFECT")
except:
    print("c-c-c-combo breaker")

print("\n \n")
try:
    print(type(other), "other")
    for i in other:
        if i in fname:
            blank = str(i)
            print(blank)
            if blank == other[2]:
                print("Yes. You. Can.")
except:
    print("THANKS OBAMA")

print("\n \n")
try:
    print(type(stuff), "stuff")
    for i in stuff:               # problem loop
        if i in fname:
            empty = str(i)
            print(empty)
            if empty == stuff[2]: # problem line
                print("Shut up and take my money!")
except:
    print("CURSE YOU ZOIDBERG!")

我能够通过前两个示例获得完整的运行,但是我无法在没有异常的情况下运行字典。循环不会将空转换成东西[2]的值。令人遗憾地把钱留在了油炸的口袋里。如果我的例子不够清楚我的要求,请告诉我。这本词典只是简短的切割计数列表并将文件添加到其他变量。

1 个答案:

答案 0 :(得分:0)

dictionary是一个无序集合,它将键映射到值。如果您将stuff定义为:

stuff = {"sheep": 2, "goat": 5, "rabbit": 6}

您可以通过以下方式引用其元素:

stuff['sheep'], stuff['goat'], stuff['rabbit']

stuff[2]会导致KeyError,因为在您的字典中找不到键2。您不能将字符串与字典的最后一个或第三个值进行比较,因为字典不是按顺序存储的(内部排序基于散列)。如果需要与最后一项进行比较,请使用列表或元组作为有序序列。

如果要遍历字典,可以将其用作模板:

for k, v in stuff.items():
    if k == 'rabbit':
        # do something  - k will be 'rabbit' and v will be 6

如果要检查以检查字典中的键是否与字符串的一部分匹配:

for k in stuff.keys():
    if k in fname:
        print('found', k)

其他一些说明:

KeyError会更容易注意到......如果你拿走了try/except块。隐藏最终用户的python错误可能很有用。隐藏你的信息是一个坏主意 - 特别是当你在代码中调试初始传递时。

您可以与列表或元组中的最后一项进行比较: if hollow == things[-1]: 如果那是你想要做的事情。

在上一个循环中:empty == str(i)必须为empty = str(i)