微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中有更好的方法来比较不同列表中的字典吗?

如何解决python中有更好的方法来比较不同列表中的字典吗?

x = [{'name': 'Abhay','has_subscription': True,'id': 1},{'name': 'Jay','id': 2},{'name': 'John','id': 3}]
y = [{'name': 'John','id': 0},{'name': 'Abhay','id': 3},{'name': 'Chanakya','id': 4}]

我想从 'y' 中获取所有不在 x 中的项目

我尝试了一些解决方案,但我认为它们没有针对在生产服务器上部署进行优化

这是我试过的代码

for user in y :
   for xuser in x:
      if user['id'] == xuser['id']:
         y.remove(user)
         break
print(y)

现在我有没有 active_subscription 的用户在 'y' 中

解决方法

一种避免重复扫描 x 的方法:

>>> x = [{'name': 'Abhay','has_subscription': True,'id': 1},{'name': 'Jay','id': 2},{'name': 'John','id': 3}]
>>> y = [{'name': 'John','id': 0},{'name': 'Abhay','id': 3},{'name': 'Chanakya','id': 4}]
>>> xk = set(d["id"] for d in x)
>>> ym = [d for d in y if d["id"] not in xk] 
>>> ym
[{'name': 'John','id': 4}]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。