3 回答

TA貢獻1818條經(jīng)驗 獲得超11個贊
假設每個dict都有一個value
鍵,你可以寫(假設你的列表被命名l
)
[d['value'] for d in l]
如果value
可能丟失,您可以使用
[d['value'] for d in l if 'value' in d]

TA貢獻1784條經(jīng)驗 獲得超8個贊
當事情變得更復雜,并且你需要開始編寫帶有復雜表達式的多子句或嵌套式理解時,值得研究其他選擇。有幾種不同的(準)標準方法可以在嵌套的dict-and-list結(jié)構(gòu)上指定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'為每個表達式指定路徑而不是理解子句*可以產(chǎn)生很大的不同。此外,JSONPath是一種與語言無關的規(guī)范,甚至還有在線測試人員可以非常方便地進行調(diào)試。
添加回答
舉報