4 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果要使用雙循環(huán):
[x['cat'] for y in a for x in y['id'] if type(x) is dict]
你必須 :
將 a 列表中的值作為列表獲?。▽?duì)于 a 中的 y)
獲取 y 中的 'id'(對(duì)于 x in y['id'])
通過(guò)過(guò)濾字典跳過(guò)字符串“吃”(如果類型(x)是字典)
訪問(wèn)“貓”
如果你 dict x, 有多個(gè)值,你可以使用
[x.values() for y in a for x in y['id'] if type(x) is dict]]

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以使用內(nèi)置函數(shù)itemgetter和 chain(來(lái)自 itertools 模塊)
from itertools import chain
from operator import itemgetter
list(map(itemgetter('cat'), chain(*map(itemgetter('id'), a))))
輸出:
['billy', 'bill', 'Harry', 'Hary']
或者您可以使用for內(nèi)部有 2 個(gè)循環(huán)的列表推導(dǎo),第一個(gè)迭代列表中的所有dict元素,第二個(gè)迭代最里面的列表并從鍵“cat”中獲取元素:
[i['cat'] for d in a for i in d['id']]

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以為此使用以下列表理解:
>>> a = [{'Hello':5, 'id':[{'cat':'billy', 'dog': 'Paul'}, {'cat':'bill', 'dog': 'Pau'}]},
{'Hello':1, 'id':[{'cat':'Harry', 'dog': 'Peter'}, {'cat':'Hary', 'dog': 'Pete'}]}]
>>> [y['cat'] for x in a for y in x['id']]
['billy', 'bill', 'Harry', 'Hary']

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
你要
b = [x['id'][0]['cat'] for x in a]
的每個(gè)元素a都是一個(gè)看起來(lái)像
{
'Hello': ...,
'id': [
{
'cat': ...
},
...
]
}
添加回答
舉報(bào)