python - 字典中的 Python 条件键/值
问题描述
我有以下代码:
payload = [
{
'car': {
'vin': message.car_reference.vin,
'brand': message.car_reference.model_manufacturer,
'model': message.car_reference.model_description,
'color': message.car_reference.color,
},
}
]
message.car_reference 上唯一保证不为 None 的字段是 vin。我仍然希望其他键(品牌、型号、颜色)只有在它们有值的情况下才会出现在字典中。
有效负载被发送到外部 API,如果例如 color = None,则会给我一个错误。
如果它们的值不是None,我如何使它只添加键和值?
到目前为止,我想到的是多个 if 语句,但这看起来很糟糕,我认为这不是正确的方法。
解决方案
此代码递归地查看数据结构内部
def recur_remover(collection):
if isinstance(collection, list):
# This allows you to pass in the whole list immediately
for item in collection:
recur_remover(item)
elif isinstance(collection, dict):
# When you hit a dictionary, this checks if there are nested dictionaries
to_delete = []
for key, val in collection.items():
if val is None:
to_delete.append(key)
else:
recur_remover(collection[key])
for k in to_delete:
# deletes all unwanted keys at once instead of mutating the dict each time
del collection[k]
else:
return
推荐阅读
- ruby-on-rails - Ruby on Rails 应用程序:ElasticSearch 错误“type”=>“cluster_block_exception”
- excel-formula - 第三列单元格应该是excel第一列和第二列中两个数字的乘积
- jquery - 单击子菜单时将类添加到父菜单
- apache-spark - 使用 MapType 列的 Spark Parquet 性能
- xpath - xPath 表达式获取主题标签的 Instagram 帖子总数
- android - 在 kotlin 中编译时出现未解决的参考
- azure - 基于 Azure 服务总线事件的受控消息
- angularjs - 在 ng-repeat 的当前索引中显示标签
- excel - Excel VBA 2013 仅自定义子粘贴未使用 FormulaR1C1 在单元格中执行
- spring - 如何通过调用服务器提供的 API 来验证经过身份验证的用户的令牌