2015-09-02 55 views
0

我想返回字典中的列表的鍵,如果搜索到的值包含在該列表中。我似乎無法弄清楚,我已經得到了最接近的是搜索鍵,返回名單:/Python 3 - 返回搜索值的字典鍵

這裏是我的代碼

mylist = {'Bob':['Harry','Jenkins', 'Onion', 'Fred', 'Earl', 'Sam'], 
      'Wayne':['Wallace', 'David', 'Eel', 'Perkins', 'Fruit', 'Angela'], 
      'Jeff':['Aaron', 'Cameron', 'Keith', 'Winston', 'Geoff', 'Wayne'] 
      } 


def tester(name): 
    if name in mylist: 
     print (True) 
     print(mylist.get(name)) 

所以,如果我搜索字典「詹金斯」它應該返回「鮑勃」

+0

如果多個列表包含該項目,會發生什麼情況? –

+0

因爲我在做什麼,他們不會,每個列表將有獨特的名稱 – greystash

+0

這聽起來是你以錯誤的方式安排數據。它看起來像'詹金斯'與一個名字'鮑勃'相關,但不是相反。這聽起來像你應該有'鮑勃'作爲關鍵和'詹金斯'作爲價值。你想做什麼? – skyking

回答

1
next((key for key, names in mylist.items() if 'Fred' in names), None) 

這將返回'Bob'。用您的變量替換'Fred'進行搜索。如果找不到名字,則返回None

+0

真棒謝謝@deceze! – greystash

1

遍歷dictionary items查看當前列表中包含搜索值,如果這樣返回鍵否則返回「否」

代碼:

mylist = {'Bob':['Harry','Jenkins', 'Onion', 'Fred', 'Earl', 'Sam'], 
      'Wayne':['Wallace', 'David', 'Eel', 'Perkins', 'Fruit', 'Angela'], 
      'Jeff':['Aaron', 'Cameron', 'Keith', 'Winston', 'Geoff', 'Wayne'] 
      } 

def tester(name): 
    for keys,value in mylist.items(): 
     if name in value: 
      return keys 
    return None 

print(tester("Harry")) 

輸出:

Bob 
+0

返回'「否」'看起來是個不錯的主意。如果你的姓名中有「否」,該怎麼辦?您可能應該返回一個可分辨的值(例如'None')或引發異常以指示未找到該名稱。 – skyking

+0

我得到這個錯誤,是否有任何與Python 3一起使用的等價函數? 回溯(最近通話最後一個): 文件 「/Users/Jordan/Desktop/answer.py」,第12行,在 打印(測試儀( 「哈利」)) 文件「/用戶/喬丹/臺式機/ answer.py「,第7行,在測試儀 中用於鍵值,mylist.iteritems()中的值: AttributeError:'dict'對象沒有屬性'iteritems' – greystash

+0

@skyking在那種情況下沒有會是我認爲最好的 – The6thSense