如何在Python中有效地将一个字典中的字符串列表与另一个字典列表进行比较?

我想在Python中比较一个字典中的字符串列表和另一个字典列表。如果 hrefsecondary_list 是不可用的 main_listజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ href 将被附加到 main_list.

基于这个需求,实现了下面的代码。

main_list = [
    {'href': 'red'},
    {'href': 'yellow'},
    {'href': 'yellow'},
]

secondary_list = [
    {'href': 'yellow'},
    {'href': 'redf'},
    {'href': 'blue'},
]
for g in secondary_list:

    if not any(d.get('href', None) == g["href"] for d in main_list):
        main_list.append({'href': g["href"]})

但是,如果我们两个字典中都有一个非常大的列表,那么使用两个for循环的实现可能会效率很低。

请问,上面的代码是否可以做得更高效、更紧凑?甚至更好的是,如果有我不知道的包存在的话?

解决方案:

你可以这样做。O(n) 复杂性。

main_set = {frozenset(g.items()) for g in main_list}
secondary_set = {frozenset(g.items()) for g in secondary_list}

main_list.extend(dict(g) for g in secondary_set - main_set)
print(main_list)

产出

[{'href': 'red'}, {'href': 'yellow'}, {'href': 'yellow'}, {'href': 'blue'}, {'href': 'redf'}]

我们的想法是建立一套冻结的字典。frozenset(g.items()) 找出区别,再转换回字典。你可以想一想 冻干 作为 可哈希集.

对于你的情况,特别是单键字典,所有的键都是一样的,你可以做。

main_set = {v for d in main_list for v in d.values()}
secondary_set = {v for d in secondary_list for v in d.values()}

main_list.extend({"href": v} for v in (secondary_set - main_set))
print(main_list)

给TA打赏
共{{data.count}}人
人已打赏
未分类

在径向梯度[闭合]中改变颜色。

2022-9-8 22:44:24

未分类

同时搜索两个词

2022-9-8 22:44:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索