擅长:python、mysql、java
<p>我知道这是个老问题,但我最近碰到了同样的问题。这是我的解决办法。我从chrisb的例子中借了很多东西(谢谢!)。</p>
<p>这样做的好处是,您可以传递一个lambda,以便从您想要的任何可枚举项以及每个组中获取最终值。</p>
<pre><code>from collections import defaultdict
def dict_from_enumerable(enumerable, final_value, *groups):
d = defaultdict(lambda: defaultdict(dict))
group_count = len(groups)
for item in enumerable:
nested = d
item_result = final_value(item) if callable(final_value) else item.get(final_value)
for i, group in enumerate(groups, start=1):
group_val = str(group(item) if callable(group) else item.get(group))
if i == group_count:
nested[group_val] = item_result
else:
nested = nested[group_val]
return d
</code></pre>
<p>在这个问题中,您可以这样调用这个函数:</p>
<pre><code>dict_from_enumerable(grouped.itertuples(), 'amount', 'year', 'office', 'candidate')
</code></pre>
<p>第一个参数也可以是一个数据数组,甚至不需要熊猫。</p>