栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Python字典中的值中查找键:

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Python字典中的值中查找键:

没有直接路线。但是,使用列表理解非常容易。

[k for k, v in d.iteritems() if v == desired_value]

如果您偶尔需要执行此操作,而又不建议将其编入索引,则不值得这样做,则可以执行以下操作:

class bidict(dict):    def key_with_value(self, value, default=None):        for k, v in self.iteritems(): if v == value:     return v        return default    def keys_with_value(self, value, default=None):        return [v for k, v in self.iteritems() if v == value]

然后

d.key_with_value
会表现得像
d.get
,相反。

您还可以创建一个自动为这两种方式建立索引的类。然后,键和值都需要是可哈希的。这是三种实现方式:

  • 在两个单独的字典中,公开了一些类似字典的方法;你也许可以做

    foo.by_key[key]
    或者做
    foo.by_value[value]
    。(没有给出任何代码,因为它更复杂,而且我很懒,我认为无论如何这都不理想。)

  • 在不同的结构,使你可以做

    d[key]
    d.inverse[value]

    class bidict(dict):def __init__(self, *args, **kwargs):    self.inverse = {}    super(bidict, self).__init__(key, value)def __setitem__(self, key, value):    super(bidict, self).__setitem__(key, value)    self.inverse[value] = keydef __delitem__(self, key):    del self.inverse[self[key]]    super(bidict, self).__delitem__(key)
  • 在相同的结构,所以,你可以做

    d[key]
    d[value]

    class bidict(dict):def __setitem__(self, key, value):    super(bidict, self).__setitem__(key, value)    super(bidict, self).__setitem__(value, key)def __delitem__(self, key):    super(bidict, self).__delitem__(self[key])    super(bidict, self).__delitem__(key)

(明显地,a的这些实现中缺少

bidict
update
方法,该方法会稍微复杂一些(但
help(dict.update)
将指示您需要涵盖的内容)。没有
update
bidict({1:2})
就不会做它打算做的事情,也不会做
d.update({1:2})
。)

还考虑其他一些数据结构是否更合适。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号