2016-10-04 26 views
0

我是新來的python,我有一個問題。我試圖找到具有價值的鑰匙;然而,鍵具有多個值。查找具有多個值的鍵的字典中的常見值

d = { 
    'a': ['john', 'doe', 'jane'], 
    'b': ['james', 'danny', 'john'], 
    'C':['john', 'scott', 'jane'], 
} 

我想找到d值john和領取鑰匙A,B和C或找到jane並獲得鑰匙a和c。

+1

如果這真的是你想要做什麼,你的字典是上下翻轉。如果你要用名字查找(例如'john'),那應該是關鍵。 –

+0

@idjaw我試了下面的代碼。我根本沒有工作。 在d.keys()中的名稱: 如果d [name] =='john': 打印名稱 –

+0

@ import.zee代碼不起作用的原因是這些值是多個名稱的列表,而不是個人名稱字符串。所以你不能測試'if d [name] =='john''是因爲'['john','doe','jane']!='john''。相反,您需要使用'in'列表中的memebership測試運算符:'if'john'in d [name]' –

回答

1

這可以使用list comprehension輕鬆完成。它遍歷包含所有鍵/值對(for key,val in d.items())的字典項目列表中的每個鍵/值對,並僅選擇目標字符串包含在值列表中的對(if 'john' in val),從結果中構建列表鍵([ key ... ])。

>>> [ key for key,val in d.items() if 'john' in val ] 
['b', 'a', 'C'] 
>>> [ key for key,val in d.items() if 'jane' in val ] 
['a', 'C'] 
+0

Thanks @David。這工作完美 –

1

所以你必須要通過字典東西,如果查找的關鍵字是在項目列表中,則相應的鍵必須存儲在一個列表,該列表中有顯示。

d = {'a':['john', 'doe', 'jane'], 'b': ['james', 'danny', 'john'], 'C':['john', 'scott', 'jane'],} 
find ='jane' 

因此,這是什麼邏輯是如何用Python編寫的

print ([m for m in d.keys() if find in d[m]]) 

,它會給下面的輸出

['a', 'C'] 
相關問題