【发布时间】:2017-08-17 17:40:57
【问题描述】:
我有两个分别来自 2016 年和 2017 年的数据字典,它们具有相同的 5 个键。我想计算每个键值与其字典中值总和的百分比,然后将每个单独键的两个百分比加入标签。我已经设法在下面这样做了,但是我的方法需要大量的 for 循环并且看起来有些笨拙。我正在寻找压缩或重写我的代码的方法,以使其更高效。
UsersPerCountry, UsersPerPlatform, UsersPerPlatform2016, UsersPerPlatform2017 = Analytics.UsersPerCountryOrPlatform()
labels = []
sizes16 = []
sizes17 = []
sumc1 = 0
sumc2 = 0
percentages = []
for k, v in dict1.iteritems():
sumv1 += v
for k, v in dict1.iteritems():
v1 = round(((float(v) / sumc1) * 100), 1)
percentages.append(v1)
labels.append(k)
sizes16.append(c)
for k, v in dict2.iteritems():
sumv1 += v
for k, v in dict2.iteritems():
v2 = round(((float(v) / sumc1) * 100), 1)
percentages.append(v2)
sizes17.append(c)
for i in range(5):
labels[i] += (', ' + str(percentages[i]) + '%' + ', ' + str(percentages[i + 5]) + '%')
这是标签的样子:
编辑:我现在已经添加了变量声明。我认为关于将所有变量设置为空列表或 0 的散列线就足够了。
【问题讨论】:
-
请贴出完整的代码sn-p。例如
sumc1和c从未被声明... -
你考虑过使用
Pandas吗?您可以将每个字典放入pd.DataFrame并使用 panda 的矢量化机制在两行中执行相同的计算。即df = pd.DataFrame(dict1)和df2=pd.DataFrame(dict2),甚至将它们组合成一个df = pd.concat([df1,df2], keys = [2016,2017])。
标签: python performance dictionary for-loop