2017-07-28 31 views
0

我無法將我的工作代碼從列表轉換爲字典。代碼的基礎知識檢查列表中任何關鍵字的文件名。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]的值。遺憾地在魚苗的口袋裏留下錢。讓我知道,如果我的例子不夠清楚,我所問的。該字典只是簡短的計算列表並將文件添加到其他變量。

+0

在最後的'try'塊中,您可能想分配而不是檢查是否相等?我認爲'empty == str(i)'應該是'empty = str(i)'。這不是主要問題,但需要考慮的事情 – davedwards

+0

我並不清楚你的目標是什麼,但有一點,'fname'只是一個字符串,但'如果我在fname:'似乎想檢查'我'在文件'fname'內容。也許字典行爲的主要問題是,你知道字典有兩個部分:'鍵'和'值',而你似乎正在將關鍵字與字典'鍵'進行比較,所以使用'for i in stuff。 ():'和'if empty == stuff.keys()[2]:' – davedwards

+0

所以對我來說,最後一個'try'塊變成這樣:'try: print(type(stuff) ,「東西」) 爲我在東西。keys():#問題循環 if if open(fname).read(): empty = str(i) print('empty'+ empty) if empty == stuff.keys()[2]: #問題行 print(「閉嘴,拿我的錢!」)' – davedwards

回答

0

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)

+0

你的意思是'for k,v in stuff.items()'? –

+0

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''可迭代,迭代已經結束了,所以'for stuff.keys()'與''for stuff''相同' –

+0

@azat yep,thanks –

相關問題