回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有这样的数据:</p>
<pre><code>plans = [
{'code':1, 'name':'Station1', 'plan_type':2, 'layer':1, 'hour':1, 'val':23.34}
{'code':1, 'name':'Station1', 'plan_type':2, 'layer':1, 'hour':2, 'val':33.34}
{'code':2, 'name':'Station2', 'plan_type':2, 'layer':1, 'hour':1, 'val':23.34}
{'code':2, 'name':'Station2', 'plan_type':2, 'layer':1, 'hour':1, 'val':23.34}
....
{'code':2, 'name':'Station2', 'plan_type':2, 'layer':1, 'hour':1, 'val':23.34}
]
</code></pre>
<p>它描述了生产计划。我想在Django模板上显示它的是</p>
<pre><code> { <code>:{'name':<name>,
<plan_type>:{<hour>:{'layer':<layer>,'val':<val>} ... }
}
}
</code></pre>
<p>这意味着按代码分组数据,设置组名称,然后按计划类型分组,对于每个计划,使用小时作为键来描述层和层中的值。
我试着理解列表</p>
<pre><code> a = { plan['code']:{
'name':plan['name'],
p['plan_type']:None for p in plans if p['code'] == plan['code']
} for plan in plans }
</code></pre>
<p>这件事不能过去。有语法错误。我可以获取计划类型的代码作为嵌套dict的键,也可以设置“name”值。有<em>defaultdict</em>和<em>itertools</em>的解决方案,但我还没有弄清楚如何应用它们。
这是可行的,但不是我想要达到的目标:</p>
<pre><code> a = { plan['code']:{
'name':plan['name'],
'plan':{p['plan_type']:None} for p in plans if p['code'] == plan['code']
} for plan in plans }
</code></pre>