将字典列表转换为表达式

3

Python v3.4.3

给出一个字典列表:

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

还有一个变量k

k = 'Frodo'

任务是编写一个表达式,从字典中分配列表,其中键不存在必须显示“not present”,所有问题必须在一行内解决。

我已经编写了可以给出期望输出的代码:

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]

但是如果在字典中要获取某个键的值时,只能使用dictionary[key]这种方式,不能和for kk in dictionarylist这样的语句结合起来使用。

在abhinsit回答了这个问题并给出了一些见解之后,我已经成功地解决了它,而且没有使用.get方法。

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

对我来说主要的问题是else语句的正确位置。


简而言之:这不是推导式的正确语法,而这正是你要寻找的。请参见链接的重复内容。 - TigerhawkT3
如果您提供期望的结果(而不是打印输出),那么您的问题会更清晰明了。此外,请从标题中删除“Python343”,因为这就是单独的标签所用的。 - Ulrich Eckhardt
另外,也请查看 kk.get(k, 'NOT PRESENT') - TigerhawkT3
从标题中删除Python343并提供预期结果而不带条件(if)。 - lescijus
1个回答

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']
>>> 

谢谢您的回答,它给出了期望的结果,但是可以在不使用 item.get 的情况下完成相同的任务。 - lescijus
是的,在字典中获取/检查值有不同的方法,这完全取决于您想要如何实现它。您可能已经编写了一个if语句而不是使用get函数。 - abhinsit
是的,对我来说问题在于else是必须的,并且else位置不能在最后,有了您的建议,我使用if得到了期望的输出: [dlist中的item[k](如果k在item中)否则'NOT PRESENT'] - lescijus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接