使用带赋值和不带赋值的defaultdicts混淆

2024-06-17 23:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力克服在pyhton中使用defalultdict和不使用赋值的行为

数据如下:

data = {'APPLaunch_ftrace': [63.3, 24.5, 8.4, 2.3, 0.9, 0.3, 0.2, 0.0], '1080pEncode_ftrace': [22.9, 27.6, 21.3, 16.1, 12.1, 0.0, 0.0, 0.0]}

请帮助我理解以下的区别:

d = {}
for k,v in data.iteritems():
        for i in range(0,8):
            d['cores{0}'.format(i)] = d.setdefault('cores{0}'.format(i),0) + v[i] * 2

print d
{'cores2': 59.400000000000006, 'cores3': 36.800000000000004, 'cores0': 172.39999999999998, 'cores1': 104.2, 'cores6': 0.4, 'cores7': 0.0, 'cores4': 26.0, 'cores5': 0.6}

以及以下内容:

d = {}
for k,v in data.iteritems():
        for i in range(0,8):
            d.setdefault('cores{0}'.format(i), 0) + v[i] *2

126.6
49.0
16.8
4.6
1.8
0.6
0.4
0.0
45.8
55.2
42.6
32.2
24.2
0.0
0.0
0.0
>>> print d
{'cores2': 0, 'cores3': 0, 'cores0': 0, 'cores1': 0, 'cores6': 0, 'cores7': 0, 'cores4': 0, 'cores5': 0}

Tags: informatfordatarangecoresprintiteritems
1条回答
网友
1楼 · 发布于 2024-06-17 23:35:33

在第一行代码中:

d['cores{0}'.format(i)] = d.setdefault('cores{0}'.format(i),0) + v[i] * 2

你真的做了三件事

  1. 在第d.setdefault('cores{0}'.format(i),0)部分中,您使用名称和值0生成dict键。

  2. 接下来用v[i]*2

  3. 最后,将这个求和值赋给ddict的条目,key=='cores{0}'.format(i)

对于data的每个条目,此过程重复8次。你知道吗

但是

在第二个代码中,您有:

d.setdefault('cores{0}'.format(i), 0) + v[i] *2

它类似于您的第一个代码,但您没有分配部分(第3部分)。你只做第一部分和第二部分,不做第三部分。你知道吗

所以你真的这么做了:

  1. 在第d.setdefault('cores{0}'.format(i),0)部分中,您使用名称和值0生成dict键。

  2. 接下来用v[i]*2

这个求和发生了,但它的值并没有保存在ddict上,它只是显示在控制台输出上,其他什么都没有。你知道吗

相关问题 更多 >