2013-02-15 2 views
-1

Я пытаюсь получить [ «A», «B»] из следующих переменных в Python:Найти значение ключа в списке словаря данного ключа

mylist = [{'A': ['a','b']}, {'B': ['c','d']}] 

и

keys = ['A'] 

Я видел различные вопросы с ответами с помощью itemgetter, но это будет работать только тогда, когда ключи словарей в списке одинаковы. (Если я использую itemgetter по моим данным, он вернет мне KeyError)

Кто-нибудь знает, как я мог бы сделать эту работу?

Спасибо!

+0

Зависит. Вам просто нужно сделать одноразовый поиск или несколько? Для одноразового поиска не стоит создавать дополнительную структуру данных –

ответ

0

Если я правильно понял, вы хотите:

mylist[0][keys[0]] 

Это потому, что ваш словарь помещен в список, так что вам нужно, чтобы получить его из первых так: mylist[0]. Затем вы можете индексировать словарь со строкой 'A', которая также является первым элементом списка, то есть keys[0]. Объединив их, вы придете к вышесказанному выше.

+0

Извините, я не объяснил правильно: пример, приведенный выше, очень упрощен, в моем сценарии я не знаю, где позиции словаря с ключом, определенным в ключах, поэтому было бы невозможно полагаться на индексы, чтобы получить нужные значения. – 2013-02-15 09:57:11

+0

Ах справедливо, так что нет «умного» способа сделать это? – 2013-02-15 09:59:01

+0

Вы хотите, чтобы все значения имели строку «А» в качестве ключа в любом из ваших словарей? – mbatchkarov

1

Я бы превратить mylist в один словарь:

In [27]: d = dict(reduce(operator.add, (x.items() for x in mylist))) 

, а затем запросить его следующим образом:

In [28]: [d[k] for k in keys] 
Out[28]: [['a', 'b']] 
+0

Удивительно, мне нравится этот ответ :) – 2013-02-15 10:07:29