通过python中的键过滤列表中字典项的值

时间:2015-11-30 07:22:11

标签: python list dictionary

我在python中有这样的列表:

x = [{'A': 1, 'B': 2}, {'A': 3, 'B': 4}, {'A': 5, 'B': 6}]

其成员为Dictionary个项目。我想过滤列表以获取此列表:

X = [1, 3, 5]

是否有像x[0:2]['A']这样的神奇命令来过滤这样的列表?

2 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。

  1. operator.itemgetter

    如果你碰巧更频繁地做这个操作,那么更喜欢这种方式

    >>> 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]
    
  2. 最简单的方法是使用[]运算符,就像这样

    >>> [item['A'] for item in X]
    [1, 3, 5]
    
  3. 如果您想避免在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]