2016-02-17 84 views
1

我在我的字典的名单如下数据:发现在Python从字典列表中选择特定值

data = [{'I-versicolor': 0, 'Sepal_Length': '7.9', 'I-setosa': 0, 'I-virginica': 1}, 
{'I-versicolor': 0, 'I-setosa': 1, 'I-virginica': 0, 'Sepal_Width': '4.2'}, 
{'I-versicolor': 2, 'Petal_Length': '3.5', 'I-setosa': 0, 'I-virginica': 0}, 
{'I-versicolor': 1.2, 'Petal_Width': '1.2', 'I-setosa': 0, 'I-virginica': 0}] 

,并获得基于键和值的列表,我使用了以下内容:

next((item for item in data if item["Sepal_Length"] == "7.9")) 

然而,所有的字典中不包含关键Sepal_Length,我得到:

KeyError: 'Sepal_Length' 

我该如何解决这个问题?

+1

这个问题让我想'list.index'应该带一个可选的'key',就像'list.sort'一样用作谓词... – Claudiu

+0

@Claudiu - 这是一个有趣的想法。我经常使用这个'next'成语,但它有一些夸克(例如,如果你不确定是否会找到匹配就提供一个默认值) – mgilson

回答

6

您可以使用dict.get来获取值:

next((item for item in data if item.get("Sepal_Length") == "7.9")) 

dict.get就像dict.__getitem__只不过它返回None(或者提供其他一些默认值),如果该键不存在。


正如奖金,你实际上并不需要额外的括号这里在发电机的表达:

# Look mom, no extra parenthesis! :-) 
next(item for item in data if item.get("Sepal_Length") == "7.9") 

,但他们帮助,如果你想指定一个默认:

next((item for item in data if item.get("Sepal_Length") == "7.9"), default)