将元组的元组转换为键值对字典

5

我有一个元组,里面包含了其他元组:

tuples=((32, 'Network architectures', 5), (33, 'Network protocols', 5))

我该如何把它转换成像这样的字典列表呢?
dict=[ {"id": 32, "name": "Network architectures", "parent_id": 5}, {"id": 33, "name": "Network protocols", "parent_id": 5}]
3个回答

7
使用以下列表推导式。首先创建一个包含所有元组重复的键的列表。然后使用 zip 创建单独的字典。
tuples=((32, 'Network architectures', 5), (33, 'Network protocols', 5))

keys = ["id", "name", "parent_id"]

answer = [{k: v for k, v in zip(keys, tup)} for tup in tuples]
# [{'id': 32, 'name': 'Network architectures', 'parent_id': 5},
#  {'id': 33, 'name': 'Network protocols', 'parent_id': 5}]

比我拥有的更加通用,不错。 - Cleb
1
@Cleb:谢谢。虽然我有一个额外的for循环,但在大量键的情况下,硬编码所有索引并不是一个好主意。 - Sheldore
@Sheldore。感谢您的回答。我已经实施了您的代码,但是当我使用print(answer)时,它返回类似于此[{'parent_id': 5, 'id': 32, 'name': 'Network architectures'},....]的内容。 - iznogoddd

6
你可以使用列表推导式:
```python ```
[{'id': t[0], 'name': t[1], 'parent_id': t[2]} for t in tuples]

这将会:

[{'id': 32, 'name': 'Network architectures', 'parent_id': 5},
 {'id': 33, 'name': 'Network protocols', 'parent_id': 5}]

1
使用 lambda 函数
tuples=((32, 'Network architectures', 5), (33, 'Network protocols', 5))
dicts = list(map(lambda x:{'id':x[0],'name':x[1], 'parent_id':x[2]}, tuples))
print(dicts)

输出

[ {"id": 32, "name": "Network architectures", "parent_id": 5}, {"id": 33, "name": "Network protocols", "parent_id": 5}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接