Python3:检查字典中的关键字是否与字符串的任何部分匹配
我无法将我的工作代码从列表转换为字典。代码的基础知识检查列表中任何关键字的文件名。Python3:检查字典中的关键字是否与字符串的任何部分匹配
但是我很难理解字典来转换它。我试图拉出每个键的名称,并将其与文件名比较,就像我对列表和元组所做的那样。这是我正在做的一个模拟版本。
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]的值。遗憾地在鱼苗的口袋里留下钱。让我知道,如果我的例子不够清楚,我所问的。该字典只是简短的计算列表并将文件添加到其他变量。
A 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)
。
你的意思是'for k,v in stuff.items()'? –
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''可迭代,迭代已经结束了,所以'for stuff.keys()'与''for stuff''相同' –
@azat yep,thanks –
在最后的'try'块中,您可能想分配而不是检查是否相等?我认为'empty == str(i)'应该是'empty = str(i)'。这不是主要问题,但需要考虑的事情 – davedwards
我并不清楚你的目标是什么,但有一点,'fname'只是一个字符串,但'如果我在fname:'似乎想检查'我'在文件'fname'内容。也许字典行为的主要问题是,你知道字典有两个部分:'键'和'值',而你似乎正在将关键字与字典'键'进行比较,所以使用'for i in stuff。 ():'和'if empty == stuff.keys()[2]:' – davedwards
所以对我来说,最后一个'try'块变成这样:'try: print(type(stuff) ,“东西”) 为我在东西。keys():#问题循环 if if open(fname).read(): empty = str(i) print('empty'+ empty) if empty == stuff.keys()[2]: #问题行 print(“闭嘴,拿我的钱!”)' – davedwards