python - 如何根据给定的键列将多个字典组合到一个列表中?

标签 python python-3.x

我正在处理一个包含许多字典的列表。在这里,我尝试根据它们的键值将这些字典组合成一个字典。有关说明,请参阅下面的示例。

my_dict =[{'COLUMN_NAME': 'TABLE_1_COL_1', 'TABLE_NAME': 'TABLE_1'}, 
{'COLUMN_NAME': 'TABLE_1_COL_2', 'TABLE_NAME': 'TABLE_1'}, 
{'COLUMN_NAME': 'TABLE_1_COL_3', 'TABLE_NAME': 'TABLE_1'}, 
{'COLUMN_NAME': 'TABLE_2_COL_1', 'TABLE_NAME': 'TABLE_2'}, 
{'COLUMN_NAME': 'TABLE_2_COL_2', 'TABLE_NAME': 'TABLE_2'}]

这里,任何键值与另一个键值匹配,则需要组合其他键值。 下面是我从上面的字典列表中期望的示例输出。

new_lst = [{'TABLE_NAME': 'TABLE_1','COLUMN_NAME':['TABLE_1_COL_1','TABLE_1_COL_2','TABLE_1_COL_3']}, {'TABLE_NAME': 'TABLE_2','COLUMN_NAME': ['TABLE_2_COL_1','TABLE_2_COL_2']]

我怎样才能以最有效的方式实现这一目标。

最佳答案

您可以使用defaultdict来获得类似输出。

from collections import defaultdict

new_lst = []

for some_dict in list_of_dicts:
    new_lst.append(defaultdict(list))

    for key, value in some_dict.items():
        new_lst[len(new_lst) - 1][key].append(value)

new_lst 将采用以下形式:

[{'TABLE_NAME': ['TABLE_1'],'COLUMN_NAME':['TABLE_1_COL_1','TABLE_1_COL_2','TABLE_1_COL_3']}, {'TABLE_NAME': ['TABLE_2'],'COLUMN_NAME': ['TABLE_2_COL_1','TABLE_2_COL_2']]

这与您想要的略有不同(即使单个元素也在数组中)。如果可以选择,我建议您保留这种格式。

要获得您想要的内容,请在上述代码后添加以下内容:

for some_dict in new_lst:
    for key, value in some_dict.items():
        if len(value) == 1:
            some_dict[key] = value[0]

现在,new_lst 与您的预期完全一样:

[{'TABLE_NAME': 'TABLE_1','COLUMN_NAME':['TABLE_1_COL_1','TABLE_1_COL_2','TABLE_1_COL_3']}, {'TABLE_NAME': 'TABLE_2','COLUMN_NAME': ['TABLE_2_COL_1','TABLE_2_COL_2']]

关于python - 如何根据给定的键列将多个字典组合到一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311573/

相关文章:

python-3.x - pip3 安装不工作 - 没有名为 'pip._vendor.pkg_resources' 的模块

python - 如何使用 Python 从网站获取并验证 JSON 数据?

python - 使用嵌套 defaultdict 重新分配 pandas 系列值

python - Fastparquet 在使用 dataframe.to_parquet() 时给出 "TypeError: expected str, bytes or os.PathLike object, not _io.BytesIO"

python - Pandas 数据框列标题到数据标签

python-3.x - 为什么 numpy 对这个逆矩阵给出了错误的答案?

python - 从 Python3 中的文件名列表中查找文件的绝对路径

python - 在Python中用轮廓绘制单位圆

Python - 返回嵌套列表中的字符串子串

python - 提取列表中找到的子列表的索引