【问题标题】:List of dictionary to an expression [duplicate]表达式的字典列表[重复]
【发布时间】:2016-08-19 18:30:46
【问题描述】:

Python v3.4.3

给定字典列表:

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

还有一个变量k

k = 'Frodo'

任务是写一个表达式来从字典中分配列表,其中键不存在必须显示'不存在',所有问题必须在 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]

但我不能合并 字典[key] 如果字典中有'key'

在字典列表中使用 for kk

在 abhinsit 回答了这个问题并给了我一些见解之后:我已经解决了没有 .get

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

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

【问题讨论】:

  • 简而言之:这不是理解的正确语法,而这正是您要寻找的。查看链接的副本。
  • 如果您提供了预期的结果(而不是打印时的输出),您的问题会更清楚。另外,从标题中删除“Python343”,这就是单独标签的用途。
  • 另外,请查看kk.get(k, 'NOT PRESENT')
  • 从标题中删除了 Python343 并给出了没有条件的预期结果(如果)

标签: python list python-3.x dictionary


【解决方案1】:
>>> 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']
>>> 

【讨论】:

  • Ty 为您的答案提供了理想的结果,但同样的任务在不使用 item.get 的情况下也是可行的。
  • 是的,有不同的方法来获取/检查字典中的值,这完全取决于你想如何实现它。你可能写了一个 if 而不是 get
  • 是的,对我来说,问题是 else 是强制性的,否则位置必须不在最后,根据您的建议,如果 [item[k] if k in item else ' dlist 中的项目“不存在”]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2021-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多