4

如何编写一个理解来提取 key='a' 的所有值?

alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}]

以下工作,但我只是破解,直到我得到我想要的。不是很好的学习方法。

[alist['a'] for alist in alist if 'a' in alist]

在我一直试图使用的理解中if key='a' in alist else 'No data'

4

4 回答 4

9
[elem['a'] for elem in alist if 'a' in elem]

可能是一种更清晰的方式来表达你上面的内容。

“for elem in alist”部分将遍历 alist,允许它查看 alist 中的每个字典。

然后,"if 'a' in elem" 将确保在查找发生之前键 'a' 在字典中,这样您就不会因为尝试查找不存在的元素而得到 KeyError词典。

最后,使用 elem['a'] 为您提供每个字典中带有键 'a' 的值。然后,整个语句将给出每个带有键“a”的字典中的值列表。

希望这使它更清楚一点。

于 2013-07-10T02:59:12.567 回答
4

你可以做:

alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}]
new_list = [a.get('a') for a in alist]

如果您只想将其限制为带有 key 的字典a

new_list = [a.get('a') for a in alist if a.get('a')]

根据 gnibbler 的建议:

new_list = [a.get('a') for a in alist if 'a' in a ]
于 2013-07-10T02:53:54.473 回答
1

我认为您需要在这里使用三元表达式

[dic['a'] if 'a' in dic else 'No Data' for dic in alist]

或使用dict.get

[dic.get('a','No Data') for dic in alist]
于 2013-07-10T03:06:58.977 回答
1

对于函数式编程爱好者来说,这是一种没有列表理解的方法

>>> alist=[{'a':'1a', 'b':'1b'},{'a':'2a','b':'2b'}, {'a':'3a','b':'3b'}]
>>> from operator import itemgetter
>>> list(map(itemgetter('a'), alist))
['1a', '2a', '3a']

要获得“无数据”,使用列表理解要容易得多

>>> [item.get('a', 'No Data') for item in alist]
['1a', '2a', '3a']

这是有效的,因为dict.get允许您指定默认参数以防找不到密钥

于 2013-07-10T03:09:19.110 回答