字典的python列表-提取列表的键值

时间:2020-05-12 04:05:21

标签: 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}]}]

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

我可以执行以下操作

b = []
for item in a:
  b+= item['b']

这给[{'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}]]

2 个答案:

答案 0 :(得分: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)

输出:

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

答案 1 :(得分:1)

您可以尝试以下解决方案。 (2)号解决方案使用Python“ itertools”模块。

(1)

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

[ r for item in a for r in item['b']]

输出...

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

(2)

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

import itertools
list(itertools.chain.from_iterable([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}]