猿问

从dicts列表中获取值列表

从dicts列表中获取值列表

我有一个像这样的dicts列表:

[{'value': 'apple', 'blah': 2}, 
 {'value': 'banana', 'blah': 3} , 
 {'value': 'cars', 'blah': 4}]

我想要 ['apple', 'banana', 'cars']

什么是最好的方法呢?


慕田峪9158850
浏览 529回答 3
3回答

慕尼黑8549860

假设每个dict都有一个value键,你可以写(假设你的列表被命名l)[d['value'] for d in l]如果value可能丢失,您可以使用[d['value'] for d in l if 'value' in d]

青春有我

当事情变得更复杂,并且你需要开始编写带有复杂表达式的多子句或嵌套式理解时,值得研究其他选择。有几种不同的(准)标准方法可以在嵌套的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是一种与语言无关的规范,甚至还有在线测试人员可以非常方便地进行调试。
随时随地看视频慕课网APP

相关分类

Python
我要回答