2016-04-26 3 views
3

Python v3.4.3Список словаря, выражение

Учитывая список словарей:

dlist = [{'Bilbo':'Ian','Frodo':'Elijah'},{'Bilbo':'Martin','Thorin':'Richard'}] 

и переменной к

k = 'Frodo' 

задача состоит в том, чтобы написать expresion в Asign список из словарь, где ключ не существует, должен быть показан «нет», вся проблема должна быть решена в 1 строке.

Я написал линию, которая дает желаемый результат:

for kk in dlist : kk[k] if k in kk else 'NOT PRESENT' 

выход:

'Elijah' 
'NOT PRESENT' 

, но проблема в том, что я не могу назначить этот вывод в переменную

res = list(for kk in dlist : kk[k] if k in kk else 'NOT PRESENT') 

или

res = [for kk in dlist : kk[k] if k in kk else 'NOT PRESENT'] 

EDIT: Кроме того, это дает правильное назначение, если все словари нужный ключ

res = [x[k] for x in dlist] 

, но я не могу объединить словарь [ключ], если «ключ» в словаре

с для кк в dictionarylist

После абхинсита ответил на этот вопрос и дал мне некоторые идеи: я решил это без .get

output = [item[k] if k in item else 'NOT PRESENT' for item in dlist] 

Основная проблема для меня была правильная позиция выражения else.

+0

Вкратце: это не правильный синтаксис для понимания, который вы ищете. См. Связанный дубликат. – TigerhawkT3

+0

Ваш вопрос будет намного яснее, если вы предоставили ожидаемый результат (а не вывод при печати). Кроме того, удалите «Python343» из заголовка, для чего предназначены отдельные теги. –

+0

Также проверьте 'kk.get (k,' NOT PRESENT ') '. – TigerhawkT3

ответ

2
>>> dlist = [{'Bilbo':'Ian','Frodo':'Elijah'},{'Bilbo':'Martin','Thorin':'Richard'}] 
>>> required_key = 'Frodo' 
>>> output = [item.get(required_key,'NOT PRESENT')for item in dlist] 
>>> output 
['Elijah', 'NOT PRESENT'] 
>>> 
+0

Ty для вашего ответа дает желаемый результат, но та же задача выполнима без использования item.get. – Justas

+0

Да, есть разные способы получить/проверить значение в словаре, все зависит от того, как вы хотите его реализовать. Возможно, вы написали a, если вместо get – abhinsit

+0

Да, для меня проблема была в том, что другое обязательное условие, а позиция должна быть не в самом конце, с вашим советом я получаю желаемый вывод с if [item [k] if k in item else 'NOT PRESENT' для элемента в dlist] – Justas

Смежные вопросы