繁体   English   中英

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

[英]Is there a better way in python to compare dictionaries in different list?

x = [{'name': 'Abhay', 'has_subscription': True, 'id': 1}, {'name': 'Jay', 'has_subscription': True, 'id': 2}, {'name': 'John', 'has_subscription': True, 'id': 3}]
y = [{'name': 'John', 'id': 0}, {'name': 'Abhay', 'id': 1}, {'name': 'Jay','id': 2}, {'name': 'John', '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)

现在我的用户没有在“y”中的 active_subscription

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

>>> x = [{'name': 'Abhay', 'has_subscription': True, 'id': 1}, {'name': 'Jay', 'has_subscription': True, 'id': 2}, {'name': 'John', 'has_subscription': True, 'id': 3}]
>>> y = [{'name': 'John', 'id': 0}, {'name': 'Abhay', 'id': 1}, {'name': 'Jay', 'id': 2}, {'name': 'John', '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': 0}, {'name': 'Chanakya', 'id': 4}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM