gpt4 book ai didi

python - 在Python中查找两个字典列表之间的差异

转载 作者:行者123 更新时间:2023-11-28 16:25:49 24 4
gpt4 key购买 nike

我试图找到 2 个字典列表之间的区别。我在这个论坛上找到了一些信息,但没有达到我的目的。

incoming_rows = [{'column_name': 'LOAD_ID', 'data_type': 'int', 'table_name': 'CONFIG'},
{'column_name': 'ROW_NUMBER', 'data_type': 'int', 'table_name': 'CONFIG'},
{'column_name': 'CREATE_DATE', 'data_type': 'VARCHAR(20)', 'table_name': 'CONFIG'},
{'column_name': 'CONFIG_TYPE', 'data_type': 'varchar(1)', 'table_name': 'CONFIG'},
{'column_name': 'CONFIG_ID', 'data_type': 'numeric(10,0)', 'table_name': 'CONFIG'}
]

available_row = [{'column_name': 'LOAD_ID', 'data_type': 'int', 'table_name': 'CONFIG'},
{'column_name': 'ROW_NUMBER', 'data_type': 'int', 'table_name': 'CONFIG'},
{'column_name': 'CREATE_DATE', 'data_type': 'date', 'table_name': 'CONFIG'}
]

这里我需要比较 incoming_rows 和 available_row 字典列表,不同之处要在另一个 dict 格式的列表中列出。这里我的表名是唯一的。状况:1. 任何新增加的列。2.数据类型的任何变化如果这两个条件为真,则 expected_row 应该只包含这些更改的行。

# expected output
expected_row=[{'column_name': 'CONFIG_TYPE', 'data_type': 'varchar(1)', 'table_name': 'CONFIG'},
{'column_name': 'CONFIG_ID', 'data_type': 'numeric(10,0)', 'table_name': 'CONFIG'},
{'column_name': 'CREATE_DATE', 'data_type': 'VARCHAR(20)', 'table_name': 'CONFIG'}
]

最佳答案

集合是这个问题的完美解决方案。不幸的是,python 不允许您将字典添加到集合中,因为它们是可变的,并且它们的哈希码可能会在插入和查找之间发生变化。

如果你“卡住”项目使它们不可变,那么你可以将它们添加到集合对象而不是列表;然后使用减号运算符取一组差值:

In [20]: i_set = { frozenset(row.items()) for row in incoming_rows }

In [21]: a_set = { frozenset(row.items()) for row in available_row }

In [22]: (i_set - a_set)
Out[22]:
{frozenset({('column_name', 'CONFIG_ID'),
('data_type', 'numeric(10,0)'),
('table_name', 'CONFIG')}),
frozenset({('column_name', 'CREATE_DATE'),
('data_type', 'VARCHAR(20)'),
('table_name', 'CONFIG')}),
frozenset({('column_name', 'CONFIG_TYPE'),
('data_type', 'varchar(1)'),
('table_name', 'CONFIG')})}

编辑:解冻:

In [25]: [dict(i) for i in i_set - a_set]
Out[25]:
[{'column_name': 'CONFIG_ID',
'data_type': 'numeric(10,0)',
'table_name': 'CONFIG'},
{'column_name': 'CREATE_DATE',
'data_type': 'VARCHAR(20)',
'table_name': 'CONFIG'},
{'column_name': 'CONFIG_TYPE',
'data_type': 'varchar(1)',
'table_name': 'CONFIG'}]

关于python - 在Python中查找两个字典列表之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com