【问题标题】:Confusion Using defaultdicts with assignments and without assignments混淆使用带赋值和不带赋值的默认字典
【发布时间】:2017-08-24 02:24:33
【问题描述】:

我正在尝试在 python 中使用带和不带赋值的 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}

【问题讨论】:

  • 好吧,在第二个中,你从来没有设置任何东西。
  • 而且这些都没有使用默认字典。

标签: python defaultdict


【解决方案1】:

在第一行代码中:

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. 接下来,您将此条目的值 (0) 与 v[i]*2 相加

  3. 最后你将这个总和值分配给d dict 的条目key=='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) 的一部分中,您使用名称和值0 创建dict 键。

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

这个总和发生了,但它的值没有保存在 d dict 上,它只是显示在控制台输出上,没有别的。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2016-03-05
    • 2016-02-22
    • 2012-08-18
    • 2018-08-20
    • 1970-01-01
    • 2019-05-14
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多