Dicts比较列表以匹配列表和检测Python中的值更改

2024-05-16 12:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,我从一个网络服务呼叫回来

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

我需要比较上一次调用服务的结果,然后拉出更改。所以下一个电话我可能会得到:

^{pr2}$

订购不保证,列表长度也不保证。名字不会改变。实际数据还有几个键,但我只关心'val'。在

我正在尝试找到一种方法来获取一个名称列表,这些名称的值在调用之间发生了更改,只针对两个列表中的名称。在

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

Tags: 数据name名称列表字典foobarval
2条回答

首先,请将你的库中的死记硬背的格式转换成真正的dict:

>>> 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'}]
>>> def dicter(l):
...     return dict([(i['name'],i['val']) for i in l])
...
>>> listA=dicter(listA)
>>> listA
{'foo': 'x', 'bar': '1', 'alice': '2'}
>>> listB=dicter(listB)
>>> listB
{'foo': 'y', 'bar': '1', 'eve': 'z'}

然后,这就变得相对容易了:

^{pr2}$

我将构建一个辅助dict来更合理地存储listA的信息:

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

然后任务变得非常简单:

^{pr2}$

相关问题 更多 >