python - 使用对特定键值的理解从字典列表创建列表

时间:2013-07-10 02:48:09

标签: python python-3.x

免责声明:我是新的python编程(只有2天经验)

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

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

以下作品但我只是入侵,直到我得到了我想要的东西。不是一个好学的方法。

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

在理解中我一直试图使用如果key ='a'在alist else'无数据'

提前感谢您的帮助

4 个答案:

答案 0 :(得分:9)

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

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

“for alm in alist”部分将迭代alist,允许它在alist中查看每个字典。

然后,在elem中的“if'a'将确保在查找发生之前键'a'在字典中,这样你就不会因为尝试查找没有'的元素而得到KeyError' t存在于字典中。

最后,取elem ['a']可以在每个字典中输入带有键'a'的值。然后,整个语句将使用键'a'给出每个词典中的值列表。

希望这会让它更清晰。

答案 1 :(得分:3)

你可以这样做:

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

如果您只想将其限制为使用键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 ]

答案 2 :(得分:1)

我认为你需要ternary expression;

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

或使用dict.get

[dic.get('a','No Data') for dic in alist]

答案 3 :(得分: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允许您在未找到密钥的情况下指定默认参数