混淆使用带有赋值和无赋值的defaultdicts

时间:2017-03-30 09:02:23

标签: python defaultdict

我正在尝试使用defalultdict在pyhton中使用和不使用赋值的行为

数据如下:

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}

以下:

{{1}}

1 个答案:

答案 0 :(得分:0)

第一行代码:

  

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

您确实做过三项工作

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

  2. 接下来,您将此项的值(0)与v[i]*2

  3. 相加
  4. 最后,您使用d == {key

  5. 将此求和值分配给'cores{0}'.format(i)字典的条目

此过程对于data的每个条目重复8次。

但是

在第二个代码中,您具有:

  

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

它类似于您的第一个代码,但是您没有分配部分(第3部分)。您只需执行第1部分和第2部分,而不执行第3部分。

所以您确实做到了:

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

  2. 接下来,您将此项的值(0)与v[i]*2

  3. 相加

发生这种求和,但其值未保存在d dict上,仅在控制台输出上显示,而没有其他显示。