list-comprehension - python - 如何使用列表推导从另一个列表中获取一些数据?

我有以下列表:


a = [{'Hello':5, 'id':[{'cat':'billy', 'dog': 'Paul'}, {'cat':'bill', 'dog': 'Pau'}]},


 {'Hello':1, 'id':[{'cat':'Harry', 'dog': 'Peter'}, {'cat':'Hary', 'dog': 'Pete'}]}]



想建立以下列表(使用列表推导):


b = ['billy', 'bill', 'Hary', 'Harry']



我尝试了这些,但没有成功:


[x for y in a for b in y['id'] for x in b]


[x for y in a for b in y['id'] for x in b['cat']]



时间: 原作者:

如果要使用双循环:


[x['cat'] for y in a for x in y['id'] if type(x) is dict]



你必须:

  • 以列表的形式获取a列表中的值(for a中的y)
  • 获取y中的''(for y中的x ['id'] )
  • 通过过滤字典跳过字符串''(如果type(x)是dict )
  • 未定义

如果dict x,有多个值,可以使用


[x.values() for y in a for x in y['id'] if type(x) is dict]]



原作者:

你想要


b = [x['id'][0]['cat'] for x in a]



a的每个元素都是一个字典,看起来像


{


 'Hello': ...,


 'id': [


 {


 'cat': ...


 },


 ...


 ]


}



原作者:

你可以使用以下列表推导:


>>> 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']



原作者:
...