欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

通过 python 得到 在 A 列表中 field_person_gh 和 field_manager_gh 与 b 列表 中 field_person_gh 和 field_manager_gh 都不一样的数据 组成一个新的列表 AG chatgpt 有大用 有大大用

a 列表 [{"field_person_gh":"12345678","field_manager_gh":"34567890","field_change_status":"修改成功","field_manager_status":"帐户正常"},{"field_person_gh":"87654345","field_manager_gh":"34567890","field_change_status":"修改成功",field_manager_status":"帐户正常"}

 b 列表 [{'field_person_gh': '12345678', 'field_manager_gh': '34567890', 'field_change_status': '修改成功', 'field_manager_status': '账户正常'}, {'field_person_gh': '87654345', 'field_manager_gh': '78906529', 'field_manager_status': '账户正常'}]{'field_person_gh': '98768934', 'field_manager_gh': '78906529', 'field_manager_status': '账户正常'}]

 通过 python 得到 在 A 列表中 field_person_gh 和 field_manager_gh 与 b 列表 中 field_person_gh 和 field_manager_gh 都不一样的数据 组成一个新的列表



在 Python 中比较两个列表(a 和 b),并找出 a 列表中 field_person_gh 和 field_manager_gh 对应的值与 b 列表中的值都不一样的数据,我们可以使用集合操作来实现。下面是一个示例代码,演示如何完成这个任务:

示例代码

python        
# A 列表和 B 列表初始化
a = [
    {"field_person_gh": "12345678", "field_manager_gh": "34567890", "field_change_status": "修改成功", "field_manager_status": "帐户正常"},
    {"field_person_gh": "87654345", "field_manager_gh": "34567890", "field_change_status": "修改成功", "field_manager_status": "帐户正常"}
]

b = [
    {'field_person_gh': '12345678', 'field_manager_gh': '34567890', 'field_change_status': '修改成功', 'field_manager_status': '账户正常'},
    {'field_person_gh': '87654345', 'field_manager_gh': '78906529', 'field_manager_status': '账户正常'},
    {'field_person_gh': '98768934', 'field_manager_gh': '78906529', 'field_manager_status': '账户正常'}
]

# 准备存放 B 列表中的 `field_person_gh` 和 `field_manager_gh`
b_pairs = {(item['field_person_gh'], item['field_manager_gh']) for item in b}

# 结果列表
result = []

# 迭代 A 列表,检查每个元素的 `field_person_gh` 和 `field_manager_gh` 是否在 B 列表中
for item in a:
    current_pair = (item['field_person_gh'], item['field_manager_gh'])
    if current_pair not in b_pairs:
        result.append(item)

# 输出结果列表
print(result)


代码说明

  1. 初始化数据:将 a 和 b 列表定义为字典的列表。

  2. 提取 B 列表的组合

  • 创建一个集合 b_pairs,其中每个元素是一个元组,包含 field_person_gh 和 field_manager_gh 的值。使用集合是为了方便后面的查找。

  • 比较和筛选:

    • 迭代 a 列表中的每个字典,构造其 field_person_gh 和 field_manager_gh 组成的元组 current_pair

    • 如果 current_pair 不在 b_pairs 中,则将该字典添加到结果列表 result

  • 输出结果:最后输出不在 B 列表中对应 field_person_gh 和 field_manager_gh 的数据。

  • 输出示例

    运行上述代码的输出将是:

    python        
    [
        {"field_person_gh": "87654345", "field_manager_gh": "34567890", "field_change_status": "修改成功", "field_manager_status": "帐户正常"}
    ]


    (根据实际数据,可能没有符合条件的项)

    这样可以得到 a 列表中 field_person_gh 和 field_manager_gh 与 b 列表中都不一样的数据。根据您给出的 b 列表样例和要求,你可能最终会得到 a 中某些项,这些项在 b 中没有对应匹配。




    b_pairs 是什么类型,不是列表 不是元组  是一个集合

    在前面提供的代码示例中,b_pairs 是一个集合(set),而不是列表(list)或元组(tuple)。集合用于存储一组唯一的项,并且在查找元素时具有较高的效率。具体来说,b_pairs 用来存放 b 列表中每个字典的 (field_person_gh, field_manager_gh) 组合。

    数据结构分析

    1. 集合(Set):

    • b_pairs = {(item['field_person_gh'], item['field_manager_gh']) for item in b}

    • 这行代码使用集合解析(set comprehension)构建了一个集合,集合中的每个元素都是一个元组,该元组包含field_person_gh 和 field_manager_gh 的值。例如,假设 b 包含两个字典,则 b_pairs 可能会类似于:

      python                            
      {('12345678', '34567890'), ('87654345', '78906529')}
                         

                     

    • 优势在于查找时的时间复杂度是 O(1),使得判断某对字段是否存在于 b 集合中更加高效。

  • 元组(Tuple):

    • 元组是不可变的序列,通常用于表示一组有序的数据。这里的每对 field_person_gh 和 field_manager_gh 被存储为元组,以便可以将这些值作为整体进行比较。

  • 列表(List):

    • 如果我们使用列表代替集合,查找元素的时间复杂度将为 O(n),这在数据量较大时会导致性能下降。

    修改后的代码示例

    如果您希望将 b_pairs 更改为列表,可以这样做:

    python                
    # 准备存放 B 列表中的 `field_person_gh` 和 `field_manager_gh`
    b_pairs = [(item['field_person_gh'], item['field_manager_gh']) for item in b]  # 这里变更为列表
    
    # 结果列表
    result = []
    
    # 迭代 A 列表,检查每个元素的 `field_person_gh` 和 `field_manager_gh` 是否在 B 列表中
    for item in a:
        current_pair = (item['field_person_gh'], item['field_manager_gh'])
        if current_pair not in b_pairs:  # 注意,这里现在是在列表中查找
            result.append(item)
    
    # 输出结果列表
    print(result)
           
           

    使用列表的注意事项

    • 虽然可以使用列表,但由于查找效率较低,建议在数据量较大的情况下继续使用集合,以获得更好的性能。

    • 除非有特定需求,否则集合(set)通常是处理这种存在性检查的推荐数据结构。

    希望这能够有效澄清类型及其用法。如有其他问题,请随时提问!


    ('12345678', '34567890') 是元组吗

    是的,('12345678', '34567890') 是一个元组(tuple)。在 Python 中,元组是一种不可变的数据结构,允许存储多个值。元组的特点包括:

    1. 不可变性:一旦创建,元组的内容不能被修改(例如,不能添加、删除或改变元组中的元素)。

    2. 可以容纳多种数据类型:可以在元组中存储不同类型的数据(例如字符串、整数等)。

    3. 使用圆括号:元组的元素总是用圆括号 () 包围,元素之间用逗号 , 分隔。

    示例

    python        
    # 创建一个元组
    my_tuple = ('12345678', '34567890')
    
    # 访问元组的元素
    print(my_tuple[0])  # 输出: 12345678
    print(my_tuple[1])  # 输出: 34567890
    
    # 尝试修改元组会导致错误
    # my_tuple[0] = '新值'  # 这将引发 TypeError: 'tuple' object does not support item assignment
    
    # 不可变性示例
    # 但是能通过创建新的元组来改变
    new_tuple = ('新值', my_tuple[1])
    print(new_tuple)  # 输出: ('新值', '34567890')


    在之前的代码中,我们使用了元组来组合 field_person_gh 和 field_manager_gh 的值,以便更方便地进行对比和查找。通过将数据放入元组中,可以轻松地传递这对值,并在后续的逻辑中轻松检查。

    如果您有更多与元组或者 Python 的其他数据结构相关的问题,欢迎继续询问!



    普通分类: