我想知道检查一对key:value
字典的正确方法是什么。让我说我有这个词典
dict_ = {
'key1':'val1',
'key2':'val2'
}
我可以查看这样的情况
if dict_['key1'] == 'val1'
但我觉得有一种更优雅的方式可以利用dict数据结构。
答案 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')
修改错字*