Skip to main content
 首页 » 编程设计

python之Dicts 比较列表以在列表之间进行匹配并检测 Python 中的值变化

2025年05月04日20kuangbin

我有一个从网络服务调用中返回的字典列表,

listA = [{'name':'foo', 'val':'x'},  
         {'name':'bar', 'val':'1'}, 
         {'name':'alice','val':'2'}] 

我需要比较之前调用服务的结果并提取更改。所以在下一个电话中我可能会接到:

listB = [{'name':'foo', 'val':'y'}, 
         {'name':'bar', 'val':'1'}, 
         {'name':'eve','val':'z'}] 

不能保证顺序,也不能保证列表的长度。名称不会改变。实际数据还有几个键,但我只关心“val”。

我正在尝试找到一种方法来取回名称列表,这些名称的值在调用之间仅针对两个列表中的名称发生变化。

changed = ['foo'] # or [{'name':'foo'}] 

请您参考如下方法:

我会构建一个辅助字典来更明智地存储 listA 的信息:

auxdict = dict((d['name'], d['val']) for d in listA) 

那么任务就变得很简单了:

changed = [d['name'] for d in listB  
           if d['name'] in auxdict and d['val'] != auxdict[d['name']]]