我在python中有这样的列表:
x = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4}, {'A': 5, 'B': 6}]
其成员为Dictionary
个项目。我想过滤列表以获取此列表:
X = [1, 3, 5]
是否有像x[0:2]['A']
这样的神奇命令来过滤这样的列表?
答案 0 :(得分:3)
有很多方法可以做到这一点。
如果你碰巧更频繁地做这个操作,那么更喜欢这种方式
>>> from operator import itemgetter
>>> get_a = itemgetter('A')
>>> [get_a(item) for item in x]
[1, 3, 5]
或map
>>> list(map(get_a, x))
[1, 3, 5]
最简单的方法是使用[]
运算符,就像这样
>>> [item['A'] for item in X]
[1, 3, 5]
如果您想避免在KeyError
不存在的词典中使用A
,您可以使用dict.get
,默认情况下会返回None
,像这样
>>> [item.get('A') for item in X]
[1, 3, 5]
答案 1 :(得分:3)
您可以使用列表理解。
>>> y = [D['A'] for D in x]
>>> y
[1, 3, 5]
此外,正如Vignesh Kalai pointed out所示,如果您希望此代码即使字符中的密钥不在字典中,也请使用此代码:
[D.get('A') for D in x]
然后使用list(filter(bool,y))
取出None
。像这样:
>>> x = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4}, {'A': 5, 'B': 6}, {'B': 8}]
>>> y = [D['A'] for D in x]
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
y = [D['A'] for D in x]
File "<pyshell#55>", line 1, in <listcomp>
y = [D['A'] for D in x]
KeyError: 'A'
>>> y = [D.get('A') for D in x]
>>> y
[1, 3, 5, None]
>>> y = list(filter(bool,y))
>>> y
[1, 3, 5]