【发布时间】:2015-02-04 16:16:52
【问题描述】:
我目前在字典推导中使用列表推导来检测两个以列表为值的字典之间的变化。
代码如下所示:
detectedChanges = {table: [field for field in tableDict[table] if field not in fieldBlackList] for table in modifiedTableDict if table not in tableBlackList}
这将创建一个字典,其中每个条目都是表名,与之关联的是一个列表更改。
我遇到的问题是,尽管此代码有效,但生成的结构 detectedChanges 填充了仅包含表名和空列表的条目(意味着未检测到任何更改)。
我目前正在对字典进行后扫描,以便删除这些条目,但我想避免将它们放在字典中。
基本上,如果我能以某种方式对[field for field in tableDict[table] 进行长度检查或其他操作,我可以在创建 key:value 条目之前对其进行验证。
我现在使用的方法有没有办法做到这一点?
【问题讨论】:
-
我不确定我是否理解你想要做什么;但是:您是否考虑过使用
for循环而不是字典理解?您的代码将更具可读性。 -
哇...你明白了。老实说,我发现您的内容很难阅读,而您为删除特定字段而编写的任何内容只会使其更难阅读。就个人而言,我会将整个事情解开成一个循环,然后您的检查变得非常容易......
-
我相信我理解你的理解和你的问题。我第三次@AndreaCorbellini 的建议是写出一个适当的
for循环。这样你就有了更多的权力,例如。使用continue跳过添加空行。
标签: python list-comprehension dictionary-comprehension