<p>直接生成一个<code>dict</code>,然后过滤以忽略falsy值可能是最安全/最直接的解决方案:</p>
<pre><code>payload = {"rulesVersion": rulesVersion,
"scriptsVersion": scriptsVersion,
"CSQ": csq,
"RebootTimes": rebootTimes,
"PowerSource": acdcSwitch,
"Temperature": temperature}
payload = {k: v for k, v in payload.items() if v} # Filter out falsy entries
</code></pre>
<p>另一种方法(如果不小心,可能会出现名称和值不匹配的风险)是使用简单的<code>dict</code>理解对<code>zip</code>-ed对进行元组化和循环:</p>
<pre><code>names = ("rulesVersion", "scriptsVersion", "CSQ", "RebootTimes", "PowerSource", "Temperature")
values = (rulesVersion, scriptsVersion, csq, rebootTimes, acdcSwitch, temperature)
payload = {name: val for name, val in zip(names, values) if val}
</code></pre>
<p>如果<code>payload</code>是一个已经存在的非空的<code>dict</code>,您应该将最后一行更改为如下内容,以添加新值,而不是将<code>payload</code>重新绑定到一个全新的<code>dict</code>:</p>
<pre><code>payload.update({name: val for name, val in zip(names, values) if val})
# Or genexpr for lower memory overhead, but slightly slower/uglier:
# payload.update((name, val) for name, val in zip(names, values) if val)
</code></pre>
<p>类似地,对于已经存在<code>payload</code>的“构建一个<code>dict</code>然后过滤它”情况,只需构建并过滤一个单独的<code>dict</code>(<code>additional_payload</code>或类似内容),然后生成最后一行:</p>
<pre><code>payload.update(additional_payload)
</code></pre>