【问题标题】:To convert a dict (with list of keys and values) into list of dict将字典(带有键和值列表)转换为字典列表
【发布时间】:2021-12-09 14:40:30
【问题描述】:

我有一个带有键列表的字典,并且值单独存储在列表列表中:

obj = {
    'keys': ['key1', 'key2', 'key3'], 
    'items': [['value1', 'value2', 'value3'], ['value4', 'value5', 'value6'], ['value7', 'value8', 'value9']]
}

所需的输出是将它们“合并”到一个字典列表中,如下所示:

[
    {'key1': 'value1', 'key2': 'val2', 'key3': 'val3'}, 
    {'key1': 'value4', 'key2': 'val5', 'key3': 'val6'}, 
    {'key1': 'value7', 'key2': 'val8', 'key3': 'val9'}
]

我试过这种直接的方法

result = []
for item in obj['items']:
        result.append(dict(zip(obj['keys'], item)))

并将其缩短为这个

[dict(zip(obj['keys'], item)) for item in obj['items']]

是否有其他替代方法来实现所需的输出?

我可以知道这个“合并”操作的名称是什么吗?

【问题讨论】:

  • 您的解决方案非常好。我认为没有理由引入其他模块(例如 pandas)来做到这一点。我不知道这种技术是什么;-)

标签: python list dictionary key-value


【解决方案1】:

你可以使用pandas:

import pandas as pd

obj = {
    'keys': ['key1', 'key2', 'key3'], 
    'items': [['value1', 'value2', 'value3'], ['value4', 'value5', 'value6'], ['value7', 'value8', 'value9']]
}

df = pd.DataFrame(obj['items'], columns=obj['keys'])
df.to_dict(orient='records')

结果:

[{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
 {'key1': 'value4', 'key2': 'value5', 'key3': 'value6'},
 {'key1': 'value7', 'key2': 'value8', 'key3': 'value9'}]

【讨论】:

    【解决方案2】:
    [ dict(zip(obj['keys'], item)) for item in obj['items'] ]
    

    您的最后一行包含以下组件:

    • 列表理解,即[ function(x) for x in list_x ]

    • 压缩2个列表,即zip(list1, list2)

    也许这些是您正在寻找的“合并”操作的名称?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2021-10-13
      相关资源
      最近更新 更多