我有一个字典列表,我想使用条件列表推导创建一个新的字典列表。
字典列表的例子有:
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的值在最后你会发现它已经改变了