为了账号安全,请及时绑定邮箱和手机立即绑定

从dicts列表中获取值列表

从dicts列表中获取值列表

慕田峪9158850 2019-07-31 18:45:08
从dicts列表中获取值列表我有一个像这样的dicts列表:[{'value': 'apple', 'blah': 2},   {'value': 'banana', 'blah': 3} ,   {'value': 'cars', 'blah': 4}]我想要 ['apple', 'banana', 'cars']什么是最好的方法呢?
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

假设每个dict都有一个value键,你可以写(假设你的列表被命名l

[d['value'] for d in l]

如果value可能丢失,您可以使用

[d['value'] for d in l if 'value' in d]


查看完整回答
反对 回复 2019-07-31
?
青春有我

TA贡献1784条经验 获得超8个赞

当事情变得更复杂,并且你需要开始编写带有复杂表达式的多子句或嵌套式理解时,值得研究其他选择。有几种不同的(准)标准方法可以在嵌套的dict-and-list结构上指定XPath样式的搜索,例如JSONPath,DPath和KVC。PyPI上有很好的库。


这是一个名为库的示例dpath,展示了它如何简化一些更复杂的东西:


>>> dd = {

...     'fruits': [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3}],

...     'vehicles': [{'value': 'cars', 'blah':4}]}


>>> {key: [{'value': d['value']} for d in value] for key, value in dd.items()}

{'fruits': [{'value': 'apple'}, {'value': 'banana'}],

 'vehicles': [{'value': 'cars'}]}


>>> dpath.util.search(dd, '*/*/value')

{'fruits': [{'value': 'apple'}, {'value': 'banana'}],

 'vehicles': [{'value': 'cars'}]}

或者,使用jsonpath-ng:


>>> [d['value'] for key, value in dd.items() for d in value]

['apple', 'banana', 'cars']

>>> [m.value for m in jsonpath_ng.parse('*.[*].value').find(dd)]

['apple', 'banana', 'cars']

乍一看这个看起来并不那么简单,因为find返回匹配对象,除了匹配的值之外还包括各种事物,例如直接指向每个项目的路径。但是对于更复杂的表达式,能够'*.[*].value'为每个表达式指定路径而不是理解子句*可以产生很大的不同。此外,JSONPath是一种与语言无关的规范,甚至还有在线测试人员可以非常方便地进行调试。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 528 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信