免责声明:我是新的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'无数据'
提前感谢您的帮助
答案 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
允许您在未找到密钥的情况下指定默认参数