2015-09-02 59 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