我有一张看起来很可笑的单子。你知道吗
[['Biking', '10'], ['Biking|Gym', '14'], ['Biking|Gym|Hiking', '9'], ['Biking|Gym|Hiking|Running', '27']]
我想把它转换成['Type',total,%]的格式,如下所示:
[['Biking',60,'34.7%'],['Gym',50,'28.9%'],['Hiking',36,'20.8%'],['Running',27,'15.6%']]
我确信我正在用最困难的方法来做这件事-有人能给我指出一个更好的方向吗?我有一个用户itertools.groupby组这似乎是一个很好的地方,但我不确定如何在这个场景中实现。你知道吗
# TODO: This is totally ridiculous.
running = 0
hiking = 0
gym = 0
biking = 0
no_exercise = 0
for r in exercise_types_l:
if 'Running' in r[0]:
running += int(r[1])
if 'Hiking' in r[0]:
hiking += int(r[1])
if 'Gym' in r[0]:
gym += int(r[1])
if 'Biking' in r[0]:
biking += int(r[1])
if 'None' in r[0]:
no_exercise += int(r[1])
total = running + hiking + gym + biking + no_exercise
l = list()
l.append(['Running', running, '{percent:.1%}'.format(percent=running/total)])
l.append(['Hiking', hiking, '{percent:.1%}'.format(percent=hiking/total)])
l.append(['Gym', gym, '{percent:.1%}'.format(percent=gym/total)])
l.append(['Biking', biking, '{percent:.1%}'.format(percent=biking/total)])
l.append(['None', no_exercise, '{percent:.1%}'.format(percent=no_exercise/total)])
l = sorted(l, key=lambda r: r[1], reverse=True)
也许是这样的(注:你可以用集合.defaultdict默认值为0,而不是使用数据.get什么?你知道吗
给出了一个初始列表,比如
您可以首先构造一个
defaultdict
来对值进行求和(得到最终结果的第二个元素),比如然后,你可以使用列表理解得到最终结果。你知道吗
因为,您希望对它们进行排序和格式化,并将最终结果更改为。你知道吗
您可以在这里使用
collections.defaultdict
。dict在这里是更好的数据结构,因为您可以访问与O(1)
类型中的任何'Type'
相关的值。你知道吗访问值:
另一种选择是使用dict作为值而不是列表:
访问值:
相关问题 更多 >
编程相关推荐