带有如下所示的字典列表
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}]]
答案 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}]