我无法将工作代码从列表转换为字典。代码的基础知识检查列表中任何关键字的文件名。
但是我很难理解字典转换它。我试图拉出每个键的名称,并将其与文件名进行比较,就像我对列表和元组所做的那样。这是我正在做的模拟版本。
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]的值。令人遗憾地把钱留在了油炸的口袋里。如果我的例子不够清楚我的要求,请告诉我。这本词典只是简短的切割计数列表并将文件添加到其他变量。
答案 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)
。