为了账号安全,请及时绑定邮箱和手机立即绑定

在python里判断一个值是否是一个字典里如果有返回key有什么好的算法?

在python里判断一个值是否是一个字典里如果有返回key有什么好的算法?

人到中年有点甜 2019-04-13 08:45:46
假如在python里有一个字典,它每个key的值都是一个列表,现在需要搜索一个字符串,判断它是否在这这个字典里,如果在,返回它的key,如果不在返回一个空,这个功能我用循环也可以做出来,但是请问有什么好的算法吗?found=0forkinmydick:ifstrinmydick[k]:found=1printkifnotfound:print'Notingfound'
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

采用listcomprehension就可以啦,示范如下
#定义一个dictionarys,查询包含5的list并且返回相应的key
s=dict(a=[1,2,3,4],b=[2,3,4,5],c=[3,5,7,8],d=[1,2,5,9])
#采用listcomprehension,python自动的就能很好的处理运行效率
result=[kfork,vins.iteritems()if5inv]
#printresult就得到包含所有key的一个list
#['c','b','d'],判断返回的list是否为空(e.g.iflen(result)==0)就知道是否有值了。
期待高手给更好的答案,不知道lambda能不能做到。更简便的方法
                            
查看完整回答
反对 回复 2019-04-13
?
九州编程

TA贡献1785条经验 获得超4个赞

看你这个功能的使用次数,如果使用次数很少,那么用其他人给的O(n^2)的方法也无所谓。
如果这个功能被调用次数很多,那么我推荐翻转字典,然后查询翻转后的字典。
fromcollectionsimportdefaultdict
definverse(d):
inv_d=defaultdict(set)
definverse_update(k,v):
inv_d[v].add(k)
fork,vsind.items():
forvinvs:
inverse_update(k,v)
returninverse_update,inv_d
inv_update_d,inv_d=inverse({'a':[1,2,3],
'b':[2,3,4],
'c':[4,5,6]})
#如果你更新了原字典d,那么记得用inv_update_d更新翻转后的字典inv_d
print(inv_d.get(5,None))#=>{'c'}
print(inv_d.get(10,None))#=>None
inv_update_d('d',10)
print(inv_d.get(10,None))#=>{'d'}
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 806 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号