<p>对于字典中的每个键,可以在列表中列出所有期望的项。只需循环<code>thedata</code>的项,并为每个键创建一个字典,其中包含<code>valueA</code>和<code>valueB</code>的单独项。对于这个任务,<code>dict.setdefault()</code>属性是个不错的选择。你知道吗</p>
<pre><code>In [18]: d = {}
In [19]: for i, j in thedata.items():
for instance in j:
d.setdefault(i, {}).setdefault('valueA', []).append(instance.valueA)
d.setdefault(i, {}).setdefault('valueB', []).append(instance.valueB)
In [20]: d
Out[21]:
{'a': {'valueB': [0.1, 0.2], 'valueA': [1, 2]},
'b': {'valueB': [0.3, 0.4], 'valueA': [3, 4]}}
</code></pre>
<p>请注意,作为一种更简洁的方法,您可以使用<code>collections.defaultdict()</code>而不是<code>dict.setdefault()</code>方法:</p>
<pre><code>In [33]: d = defaultdict(lambda: defaultdict(list))
In [34]: for i, j in thedata.items():
for instance in j:
d[i]['valueA'].append(instance.valueA)
d[i]['valueB'].append(instance.valueB)
....:
In [35]: d
Out[35]: defaultdict(<function <lambda> at 0x7fb5888786a8>,
{'a': defaultdict(<class 'list'>,
{'valueB': [0.1, 0.2], 'valueA': [1, 2]}),
'b': defaultdict(<class 'list'>,
{'valueB': [0.3, 0.4], 'valueA': [3, 4]})})
</code></pre>