为什么在Python中使用列表推导时得到None ?



我有一个字典列表,我想使用条件列表推导创建一个新的字典列表。

字典列表的例子有:

d1 = [{'id': '1', 'co': '1', 'w': '10'}, {'id': '5', 'co': '2', 'w':'60'}]
d2 = [{'id': '1', 'na': 'Bi', 'teac': ' D'}]

作为输出,期望的输出是:

d_new = [{'id': '1', 'co': '1', 'w': '10', 'na': 'Bi', 'teac': ' D'}]

我最初的方法是使用如下的推导式:

[d1.update({'na':r['na'],'teac':r['teac']}) for d in d1 for r in d2 if d['co'] == r['id']]

然而,我得到的是[None, None]作为输出。

任何想法如何解决这个问题,以获得所需的输出?

只是一个快速更新:

我的意思是这个,而不是下面这个:

[d.update({'na':r['na'],'teac':r['teac']}) for d in d1 for r in d2 if d['co'] == r['id']]

对于一个你的代码对你的输出应该是什么没有意义,无论如何,对于你的问题的答案,为什么[None, None]列表推导返回一个包含你的语句d1.update(某物)的返回的列表,它是在地方更新并返回什么(None),并且循环运行两次,因为d1中有2项,d2中有1项(2*1)(即,如果你在最后没有if语句,考虑它是否会返回[None]),所以你在列表中得到2个None检查d1的值在最后你会发现它已经改变了

最新更新