python - 为什么在 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(something) 的返回的列表,它是就地的更新并不返回任何内容(无),并且循环运行两次,因为 d1 中有 2 个项目,d2 中有 1 个项目(2*1)(即,如果最后没有 if 语句,请考虑它是否会返回 [None] ) 所以你在列表中得到 2 个无,最后检查 d1 的值,你会看到它已经改变
推荐阅读
- javascript - 如何让我的 chrome 扩展记住切换开关或其他操作?
- mysql - Mysql兼容的内存数据库中的查询错误(h2)
- google-drive-api - 修补/更新谷歌驱动文件元数据中属性列表中的特定键值
- java - 如何配置Oracle云证书?
- r - 如何在 R 中手动执行交互项?
- android - 在项目“应用程序”中,已解决的 Google Play 服务库依赖项依赖于另一个确切版本(例如“[11.0.4]”
- prometheus - Process_Exporter 找不到我感兴趣的单个进程
- react-native - 底部导航栏的反应原生复杂形状
- javascript - 如何通过使用数组进行比较来创建警报
- neo4j - NEO4J 在加载 CSV 时创建关系