我有一个从网络服务调用中返回的字典列表,
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']]]
