转换列表以形成obj

2024-06-23 18:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

什么是最能转化这个的方式:

{'a': ['apple1', 'apple2', 'apple3'], 'b': ['banana1', 'banana2', 'banana3']}

为什么要这么做

[{'a': 'apple1', 'b': 'banana1'}, {'a': 'apple2', 'b': 'banana2'}, {'a': 'apple3', 'b': 'banana3'}]

我更喜欢不使用数组理解的解决方案

这是我目前的做法

d = {
    'a': ['apple1', 'apple2', 'apple3'],
    'b': ['banana1', 'banana2', 'banana3']
}

r = []
for k,v in d.items():
    for i in range(len(v)):
        if len(r) <= i:
            r.append({})
        r[i][k] = v[i]

Tags: inforlenif方式itemsrange数组
1条回答
网友
1楼 · 发布于 2024-06-23 18:37:56

您可以使用以下方法:

[dict(zip(d.keys(),vs)) for vs in zip(*d.values())]

使用d原始词典

这会产生:

>>> [dict(zip(d.keys(),vs)) for vs in zip(*d.values())]
[{'b': 'banana1', 'a': 'apple1'}, {'b': 'banana2', 'a': 'apple2'}, {'b': 'banana3', 'a': 'apple3'}]

代码的工作方式如下,可以保证-给定的字典不会更改-d.keys()d.values()相同的顺序生成键/值:因此您可以dict(zip(d.keys(),d.values()))返回到原始字典中

现在我们要做的是用zip(*d.values())对字典的.values()进行转置。对于每个这样的“列”(transpose的),我们用d.keys()压缩该列并将其转换为字典(用dict(..)),通过使用列表理解,我们最终将遍历所有行

请注意,迭代从值中的一个列表用尽时停止

相关问题 更多 >

    热门问题