首页 > 解决方案 > 为什么在 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']]

标签: pythonlistdictionary

解决方案


一方面,您的代码对于您的输出应该是什么毫无意义,无论如何,对于您的问题的答案,即为什么 [None, None] 列表理解返回一个包含您的声明 d1.update(something) 的返回的列表,它是就地的更新并不返回任何内容(无),并且循环运行两次,因为 d1 中有 2 个项目,d2 中有 1 个项目(2*1)(即,如果最后没有 if 语句,请考虑它是否会返回 [None] ) 所以你在列表中得到 2 个无,最后检查 d1 的值,你会看到它已经改变


推荐阅读