带有dicts Python的条件

时间:2014-09-17 23:35:19

标签: python python-2.7 dictionary conditional

我想知道检查一对key:value字典的正确方法是什么。让我说我有这个词典

dict_ = {
            'key1':'val1',
            'key2':'val2'
        }

我可以查看这样的情况

if dict_['key1'] == 'val1'

但我觉得有一种更优雅的方式可以利用dict数据结构。

3 个答案:

答案 0 :(得分:1)

如果您想要避免抛出KeyError,如果dict甚至不包含' key1':

if dict_.get('key1')=='val1':

(但是,抛出缺失密钥的异常是非常好的Python习惯用法。)

否则,@ Cyber​​是正确的,它已经很好了! (究竟是什么问题?)

答案 1 :(得分:1)

您已经在做什么 利用数据结构,这就是为什么它是“明显的方式”来做你想做的事情。 (您可以在整个教程,参考文档和stdlib实现中找到这样的示例。)

然而,我可以看到你在想什么:dict在某种意义上是一个键值对的容器(即使它只是一个collections.Container个键......),所以......不应该有某种方法来检查一个键值对是否存在?

直到Python 2.6,确实没有。*但是在3.0中,items()方法返回一个特殊的set-like view键值对。并且2.7以名称viewitems向后移植了该功能。所以:

('key1', 'val1') in d.viewitems()

但我认为这不是更清楚或更清洁; “items”感觉就像是一种低级的词典思考方式而不是“映射”,这就是你的原始代码和smci的答案所依赖的。

它也不那么简洁,它在2.6或更早版本中不起作用,并且许多dict - 类似的映射对象不支持它,**并且它在2.7引导时略慢,但这些是可能不太重要,而不是你问的问题。


*嗯,,但只能通过使用iteritems迭代所有项目,或使用items来有效地执行相同的详尽搜索你的背,这两者都不是你想要的。

**事实上,在2.7中,实际上可能并不支持纯Python类...

答案 2 :(得分:-1)

有一个has_key函数

dict_.has_key('key1')

返回布尔值true或false。

或者,当密钥不存在时,您可以让函数返回默认值。

dict_.get('key3','Default Value')

修改错字*