有这么一个字典,现在需要 把 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 ![]() 看来我理解错了你的加法~ 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']] |