我正在与python词典挣扎.我创建了一个字典,看起来像:
d = {'0.500': ['18.4 0.5', '17.9 0.4', '16.9 0.4', '18.6 0.4'],
'1.000': ['14.8 0.5', '14.9 0.5', '15.6 0.4', '15.9 0.3'],
'0.000': ['23.2 0.5', '23.2 0.8', '23.2 0.7', '23.2 0.1']}
Run Code Online (Sandbox Code Playgroud)
我想最终得到:
0.500 17.95 0.425
Run Code Online (Sandbox Code Playgroud)
这是关键,平均值为(18.4 + 17.9 + 16.9 + 18.6),平均值为(0.5 + 0.4 + 0.4 + 0.4)
(对于1.000和0.000及其相应的平均值相同)
最初我的字典只有两个值,所以我可以依赖索引:
for key in d:
dvdl1 = d[key][0].split(" ")[0]
dvdl2 = d[key][1].split(" ")[0]
average = ((float(dvdl1)+float(dvdl2))/2)
Run Code Online (Sandbox Code Playgroud)
但是现在我希望我的代码可以用于不同的字典长度,例如4(上面的示例)或5或6个值...
干杯!
for k,v in d.iteritems():
col1, col2 = zip(*[map(float,x.split()) for x in v])
print k, sum(col1)/len(v), sum(col2)/len(v)
...
0.500 17.95 0.425
1.000 15.3 0.425
0.000 23.2 0.525
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
>>> v = ['18.4 0.5', '17.9 0.4', '16.9 0.4', '18.6 0.4']
Run Code Online (Sandbox Code Playgroud)
首先将每个项目分成白色空格并应用于float它们,因此我们得到一个列表列表:
>>> zipp = [map(float,x.split()) for x in v]
>>> zipp
[[18.4, 0.5], [17.9, 0.4], [16.9, 0.4], [18.6, 0.4]] #list of rows
Run Code Online (Sandbox Code Playgroud)
现在我们可以使用zip与*充当未压缩和我们将得到列的列表.
>>> zip(*zipp)
[(18.4, 17.9, 16.9, 18.6), (0.5, 0.4, 0.4, 0.4)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |