2015-11-30 3 views
1

У меня есть список, как это в Python:фильтра значение словарных элементов в списке по ключу в питоне

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

, что его члены являются Dictionary элементами. Я хочу, чтобы отфильтровать список, чтобы получить этот список:

X = [1, 3, 5] 

является ли какой-то волшебной команды как x[0:2]['A'], чтобы отфильтровать список, как это или нет?

+1

'[D [ 'A'] для D в х]' –

+0

@ El'endiaStarman спасибо. это сработало. не могли бы вы разместить его в качестве ответа? – Navid777

+0

@ El'endiaStarman вы можете использовать '[D.get ('A') для D в x]', чтобы избежать ошибки ключа – The6thSense

ответ

2

Вы можете использовать понимание списка.

>>> 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 s. Как так:

>>> 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] 
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] 
    
Смежные вопросы