2016-04-26 94 views
3

的Python v3.4.3列表词典的一种表达

鉴于字典的列表:

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

和变量k

k = 'Frodo' 

任务是写为一个函数,以从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'] 

编辑: 除了这给了,如果所有的字典都需要的关键正确分配

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

,但我不能结合 词典[关键]如果“密钥”在字典

与在dictionarylist KK

abhinsit回答了这个问题后,给了我一些见解:我已经解决了.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

是的,有不同的方式来获取/检查字典中的值,这一切都取决于你想如何实现它。你可能已经写了一个if而不是得到 – abhinsit

+0

对我来说是的问题是其他的是强制性的,否则位置必须不是最终的,你的建议我得到理想的输出,如果 [item [k] if k in项目其他'不存在'为dlist中的项目] – Justas