如何编写一个理解来提取 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'
如何编写一个理解来提取 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'
[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”的字典中的值列表。
希望这使它更清楚一点。
你可以做:
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 ]
我认为您需要在这里使用三元表达式;
[dic['a'] if 'a' in dic else 'No Data' for dic in alist]
或使用dict.get
:
[dic.get('a','No Data') for dic in alist]
对于函数式编程爱好者来说,这是一种没有列表理解的方法
>>> 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
允许您指定默认参数以防找不到密钥