python list of dicts - 提取列表的键值

use*_*440 1 python list-comprehension

有一个像下面这样的字典列表

a = [{'a': 1, 'b': [{'c': [1, 2, 3], 'd': 4}, {'c': [5, 6, 1], 'd': 7}]}, {'a': 2, 'b': [{'c': [2, 3, 4], 'd': 5}, {'c': [7, 6, 1], 'd': 8}]}]
Run Code Online (Sandbox Code Playgroud)

需要将键的值提取b到另一个列表中

我可以做到以下几点

b = []
for item in a:
  b+= item['b']
Run Code Online (Sandbox Code Playgroud)

[{'c': [1, 2, 3], 'd': 4}, {'c': [5, 6, 1], 'd': 7}, {'c': [2, 3, 4], 'd': 5}, {'c': [7, 6, 1], 'd': 8}]很好。

我正在尝试学习列表理解,并想知道如何做到这一点。我尝试了以下 [ item['b'] for item in a]。但是,这给出了如下列表的列表。

[[{'c': [1, 2, 3], 'd': 4}, {'c': [5, 6, 1], 'd': 7}], [{'c': [2, 3, 4], 'd': 5}, {'c': [7, 6, 1], 'd': 8}]]

Ber*_*sen 5

我会尝试这样的事情,请记住,在列表理解中,外循环比内循环先出现

a = [{'a': 1, 'b': [{'c': [1, 2, 3], 'd': 4}, {'c': [5, 6, 1], 'd': 7}]}, {'a': 2, 'b': [{'c': [2, 3, 4], 'd': 5}, {'c': [7, 6, 1], 'd': 8}]}]

b = [ c for d in a for c in d['b']]
print(b)
Run Code Online (Sandbox Code Playgroud)

输出:

[{'c': [1, 2, 3], 'd': 4}, {'c': [5, 6, 1], 'd': 7}, {'c': [2, 3, 4], 'd': 5}, {'c': [7, 6, 1], 'd': 8}]
Run Code Online (Sandbox Code Playgroud)