Py学习  »  Python

从嵌套字典Python创建值列表

Wiseface • 3 年前 • 1422 次点击  

我有以下数据结构:

listionary = [{'a': [{'id': 30, 'name': 'bob'}, {'id': 50, 'name':'mike'}]},
             {'b': [{'id': 99, 'name': 'guy'}, {'id': 77, 'name':'hal'}]}]

我想为每个元素创建一个值列表 'id' 钥匙

ie. lst = [30, 50, 99, 77]

我知道我需要三个迭代器来遍历结构:

一个用于访问数组中的两个父字典,另一个用于访问键列表 'a' 'b' ,然后是最后一个来获取每个的值 id 输入嵌套的子字典

我试过了

lst = [[x][y][y]['id'] for x, y, z in listionary]

但我犯了一个错误

ValueError: not enough values to unpack (expected 3, got 1)

有没有干净的方法来实现这一点?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131913
 
1422 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Andrej Kesely
Reply   •   1 楼
Andrej Kesely    3 年前

你可以用3个 for 列表理解中的循环:

listionary = [
    {"a": [{"id": 30, "name": "bob"}, {"id": 50, "name": "mike"}]},
    {"b": [{"id": 99, "name": "guy"}, {"id": 77, "name": "hal"}]},
]

lst = [d["id"] for d in listionary for v in d.values() for d in v]
print(lst)

印刷品:

[30, 50, 99, 77]

说明:

for d in listionary -这将迭代列表中的所有项目 listionary ( {"a":...}, {"b":...} )

for v in d.values() -这将迭代这些字典中的所有项( [{"id:...}, {"id":...}], [...] )

for d in v -这将从这些列表中获取所有词典( {"id:...}, {"id":...}, .... )

d["id"] -这将从密钥中获取值 "id"