混淆使用带赋值和不带赋值的 defaultdicts
Confusion Using defaultdicts with assignments and without assignments
我正在尝试在 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}
在第一行代码中:
d['cores{0}'.format(i)] = d.setdefault('cores{0}'.format(i),0) + v[i] * 2
你真的做三份工作
在 d.setdefault('cores{0}'.format(i),0)
部分,您使用名称和值 0
.
创建了 dict
个键
接下来您将此条目的值 (0
) 与 v[i]*2
相加
最后你将这个总和值分配给 d
dict 的条目 key
=='cores{0}'.format(i)
对于 data
的每个条目,此过程重复 8 次。
但是
在第二个代码中你有:
d.setdefault('cores{0}'.format(i), 0) + v[i] *2
它类似于您的第一个代码,但您没有分配部分(第 3 部分)。你只做第 1 部分和第 2 部分,而不是第 3 部分。
所以你确实做到了:
在 d.setdefault('cores{0}'.format(i),0)
部分,您使用名称和值 0
.
创建了 dict
个键
接下来您将此条目的值 (0
) 与 v[i]*2
相加
这个求和发生了,但是它的值没有保存在 d
dict 上,它只显示在控制台输出上,没有别的。
我正在尝试在 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}
在第一行代码中:
d['cores{0}'.format(i)] = d.setdefault('cores{0}'.format(i),0) + v[i] * 2
你真的做三份工作
在
d.setdefault('cores{0}'.format(i),0)
部分,您使用名称和值0
. 创建了 接下来您将此条目的值 (
0
) 与v[i]*2
相加
最后你将这个总和值分配给
d
dict 的条目key
=='cores{0}'.format(i)
dict
个键
对于 data
的每个条目,此过程重复 8 次。
但是
在第二个代码中你有:
d.setdefault('cores{0}'.format(i), 0) + v[i] *2
它类似于您的第一个代码,但您没有分配部分(第 3 部分)。你只做第 1 部分和第 2 部分,而不是第 3 部分。
所以你确实做到了:
在
d.setdefault('cores{0}'.format(i),0)
部分,您使用名称和值0
. 创建了 接下来您将此条目的值 (
0
) 与v[i]*2
相加
dict
个键
这个求和发生了,但是它的值没有保存在 d
dict 上,它只显示在控制台输出上,没有别的。