当前位置: 首页 > 面试题库 >

在Python中找到两个字典列表之间的区别

郎诚
2023-03-14
问题内容

我试图找到字典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'}
             ]

在这里,我需要将传入行与字典的available_row列表进行比较,差异要以另一种dict格式列表进行列出。这里我的表名是唯一的。条件:1.任何新添加的列。2.数据类型的任何更改如果这两个条件为true,则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'}]


 类似资料:
  • 问题内容: 我有两个字典。我需要找到两者之间的区别,这应该给我关键和价值。 我已经搜索并找到了一些插件/软件包,例如datadiff,dictdiff-master,但是当我在Python 2.7中尝试时,它说没有定义这样的模块。 我在这里用套装。 输出>>> set([[‘SCD-3547’,’SCD-3456’]) 我只有钥匙,我什至需要获取值。 问题答案: 使用字典理解来尝试以下代码段: 在

  • 问题内容: 我有以下Python数据结构: 我正在寻找在两个列表之间获得增量的最佳方法。Python中有什么东西比JavaScript Underscore.js(_.difference)库方便吗? 问题答案: 用途:

  • 问题内容: 假设你有: 产生以下字典的最简单方法是什么? 问题答案: 像这样: Voila 成对的·构造函数和·函数非常有用:

  • 问题内容: 需要在某种类型的查找表中放入大约1000万个值,所以我想知道列表或字典哪个更有效? 我知道你可以为这两种方法执行以下操作: 和 我的想法是,该命令将更快,更高效。 谢谢你的帮助。 编辑1 我正在尝试做的更多信息。 欧拉问题92。我正在查找表,以查看计算出的值是否已经准备好了。 编辑2 查找效率。 编辑3 没有与值相关的值…那么集合会更好吗? 问题答案: 速度 关于数据结构中的项目数,列

  • 问题内容: 我有两个系列,并以大熊猫为单位,想计算相交点,即该系列的所有值都相同的地方。 我将如何使用该功能执行此操作?我一直在试图解决它,但一直未能(我不想计算上的索引交集和,但对值)。 问题答案: 将两个系列放置在Python的set容器中,然后使用set相交方法: 然后根据需要转换回列表。 刚注意到标签中的熊猫。可以转换为: 从注释中,我将其更改为更Python化的表达式,该表达式更短且更易

  • 问题内容: 我已经看到在Python中实际上有两种(也许更多)串联列表的方法:一种方法是使用extend()方法: 另一个使用plus(+)运算符: 现在,我想知道:这两个选项中的哪一个是列表连接的“ pythonic”方式,并且两者之间有区别(我查看了Python的官方教程,但找不到有关此主题的任何信息)。 问题答案: 在字节码级别上的唯一区别是,该方式涉及函数调用,在Python中该函数比。调