python - 如何在从python中的动态输入中删除重复项的同时合并两个列表
问题描述
我有一个这样的列表:
[{'groups': ['Engineer', 'It', 'Office Floor 2', 'Penang']}, {'groups': ['Engineer', 'Penang', 'Testnew']}]
我想要做的就是将它分开以删除列表中的重复项,例如:
['Engineer', 'It', 'Office Floor 2', 'Penang', 'Testnew']
我试过这段代码:
list_1 = ['Engineer', 'It', 'Office Floor 2', 'Penang']
list_2 = ['Engineer', 'Penang', 'Testnew']
set_1 = set(list_1)
set_2 = set(list_2)
list_2_items_not_in_list_1 = list(set_2 - set_1)
combined_list = list_1 + list_2_items_not_in_list_1
print(combined_list)
虽然它有效,但我怎样才能将其修改为动态列表?由于我的列表不是静态的,它可能会根据用户输入的数量而变化。
解决方案
如果出现的顺序是一个约束,你可以这样做:
lst = [{'groups': ['Engineer', 'It', 'Office Floor 2', 'Penang']}, {'groups': ['Engineer', 'Penang', 'Testnew']}]
seen = set()
result = []
for d in lst:
for e in d["groups"]:
if e not in seen:
result.append(e)
seen.add(e)
print(result)
输出
['Engineer', 'It', 'Office Floor 2', 'Penang', 'Testnew']
如果出现的顺序不是约束:
from itertools import chain
result = list(set(chain.from_iterable(d["groups"] for d in lst)))
print(result)
输出
['Office Floor 2', 'Penang', 'Testnew', 'It', 'Engineer']
或者简单地说:
result = list(set(e for d in lst for e in d["groups"]))
推荐阅读
- laravel - Laravel:在 where 子句中使用“LIKE”
- flutter - 使用 Custom Painter 在 Flutter 中掩盖路径和绘画
- flutter - 滚动控制器出错
- ruby-on-rails - 带有 Devise Token Auth 未初始化常量用户的 Rails
- ios - .png 文件在 Xcode 中以黑色背景加载
- python - 我需要用户输入从一个数据框指向另一个数据框并显示第二个数据框-python 中的一列
- mysql - 调用两个外键上使用的相同主键来显示不同的行/结果
- python-3.x - Python嵌套函数调用类中的另一个函数
- elasticsearch - 我可以在没有证书和身份验证的情况下使用 Elasticsearch https
- php - 如何修复在 xampp 上执行 mysqli 代码时出现的错误?