有这么一个字典,现在需要
把 height,y
分别乘以 1080
,然后取整(应该需要四舍五入),
把 width,x
分别乘以1920
,然后取整(应该需要四舍五入),
最后放到一个 list 里边, 然后还需要做一个加法,有什么简单的办法吗,写 for 循环要 2 大坨,不甘心,看看万能的 v 友,有什么快速简单的方法没有
a = {'height': 0.724074, 'width': 0.226042, 'x': 0.295833, 'y': 0.275926}
最后输出一个:
[568, 298, 1002, 1080] # 顺序和数值有些变化 [x, y, x + width, y + height]
1
zhengyongtao 2018-09-13 11:59:41 +08:00
总共就四个数值为什么要写 for 循环?直接列表推导式不就好了
|
2
css3 OP @zhengyongtao 列表推导也不好直接生成我想要的结果啊,只能取到 values, 再循环?
|
3
epicnoob 2018-09-13 12:27:22 +08:00
>>> k = numpy.array([[0,0,1920,0],[0,0,0,1080],[0,1920,1920,0],[1080,0,0,1080]])
>>> numpy.dot(k, numpy.array(list(a.values())).reshape(4,1)) |
4
cbiqih 2018-09-13 12:46:12 +08:00
from operator import mul
a = {'height': 0.724074, 'width': 0.226042, 'x': 0.295833, 'y': 0.275926} b = {'height': 1080, 'width': 1920, 'x': 1920, 'y': 1080} result = sum(map(lambda x: mul(*x), zip(a.values(), b.values()))) |
5
xpresslink 2018-09-13 12:48:34 +08:00
就四个数还折腾什么。
真够懒的,虽然是程序员三大美德之一吧,但是也得注意一下 kiss 原则 |
6
cbiqih 2018-09-13 12:52:05 +08:00
考虑到 dict 是无序的,获取的 values 不一定能一一对应上.
a = {'height': 0.724074, 'width': 0.226042, 'x': 0.295833, 'y': 0.275926} b = {'height': 1080, 'width': 1920, 'x': 1920, 'y': 1080} result = sum(list(value * b[key] for key,value in a.items())) |
7
cbiqih 2018-09-13 12:59:11 +08:00 1
看来我理解错了你的加法~
a = {'height': 0.724074, 'width': 0.226042, 'x': 0.295833, 'y': 0.275926} b = {'height': 1080, 'width': 1920, 'x': 1920, 'y': 1080} d = {key:int(value * b[key]) for key,value in a.items()} return [d['x'], d['y'], d['width'] + d['x'], d['height'] + d['y']] |