鱼C论坛

 找回密码
 立即注册
查看: 574|回复: 5

[已解决]python 字典

[复制链接]
发表于 2019-4-23 14:17:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
{'red': [(50, 50), (50, 90), (90, 90)], 'green': [(160, 170), (160, 130), (120, 130)], 'blue': [(200, 30), (180, 30), (180, 50), (220, 50)], 'yellow': [(40, 100), (40, 140), (60, 140), (60, 120)], 'purple': [(210, 70), (230, 90), (270, 90), (270, 50), (230, 50)], 'olive': [(180, 130), (180, 170), (220, 210), (240, 190)], 'magenta': [(100, 200), (120, 180), (80, 140), (80, 180)]}
请问
如何把该字典中的值输出成这样呢?
{'red': [(0,40),(40,0),(- 40,- 40)], 'green': [(0, -40), (-40, 0), (-40, -40)], 'blue': [(-20, 0), (0, 20), (40, 0), (-20,-20)], 'yellow': [(0, 40), (20, 0), (0, -20), (-20, -20)], 'purple': [(20, 20), (40, 0), (0, -40), (40, 0), (-20, 20)], 'olive': [(0, 40), (40, 40), (20, 20), (-60, -60)], 'magenta': [(20, -20), (-40, -40), (0, 40), (20, 20)]}
就是由点左边————>向量, 后面的坐标减去前面的坐标值。。得到上面这个字典
最佳答案
2019-4-23 15:06:23
  1. d1 = {'red': [(50, 50), (50, 90), (90, 90)], 'green': [(160, 170), (160, 130), (120, 130)], 'blue': [(200, 30), (180, 30), (180, 50), (220, 50)], 'yellow': [(40, 100), (40, 140), (60, 140), (60, 120)], 'purple': [(210, 70), (230, 90), (270, 90), (270, 50), (230, 50)], 'olive': [(180, 130), (180, 170), (220, 210), (240, 190)], 'magenta': [(100, 200), (120, 180), (80, 140), (80, 180)]}
  2. d2 = {}
  3. for i, j in d1.items():
  4.     data = []
  5.     len1 = len(j)
  6.     for n in range(len1):
  7.         data.append((j[(n + 1) % len1][0] - j[n][0], j[(n + 1) % len1][1] - j[n][1]))
  8.         d2[i] = data
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-23 15:06:23 | 显示全部楼层    本楼为最佳答案   
  1. d1 = {'red': [(50, 50), (50, 90), (90, 90)], 'green': [(160, 170), (160, 130), (120, 130)], 'blue': [(200, 30), (180, 30), (180, 50), (220, 50)], 'yellow': [(40, 100), (40, 140), (60, 140), (60, 120)], 'purple': [(210, 70), (230, 90), (270, 90), (270, 50), (230, 50)], 'olive': [(180, 130), (180, 170), (220, 210), (240, 190)], 'magenta': [(100, 200), (120, 180), (80, 140), (80, 180)]}
  2. d2 = {}
  3. for i, j in d1.items():
  4.     data = []
  5.     len1 = len(j)
  6.     for n in range(len1):
  7.         data.append((j[(n + 1) % len1][0] - j[n][0], j[(n + 1) % len1][1] - j[n][1]))
  8.         d2[i] = data
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 15:12:57 | 显示全部楼层
本帖最后由 凌九霄 于 2019-4-23 15:48 编辑
  1. import collections

  2. d = {'red': [(50, 50), (50, 90), (90, 90)], 'green': [(160, 170), (160, 130), (120, 130)],
  3.      'blue': [(200, 30), (180, 30), (180, 50), (220, 50)], 'yellow': [(40, 100), (40, 140), (60, 140), (60, 120)],
  4.      'purple': [(210, 70), (230, 90), (270, 90), (270, 50), (230, 50)], 'olive': [(180, 130), (180, 170), (220, 210), (240, 190)],
  5.      'magenta': [(100, 200), (120, 180), (80, 140), (80, 180)]}

  6. new = {}

  7. for i in d.items():
  8.     tp = []
  9.     dl = collections.deque()
  10.     dl.extend(i[1])
  11.     for k in range(len(dl)):
  12.         x, y = dl[1][0] - dl[0][0], dl[1][1] - dl[0][1]
  13.         tp.append((x, y))
  14.         dl.rotate(-1)
  15.     new[i[0]] = tp[:]

  16. print(new)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 15:25:11 | 显示全部楼层

谢谢您,不过不好意思,楼上的老哥先解决了我的问题,最佳答案能设置多次就好了 感谢!学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 15:27:27 | 显示全部楼层
2楼 3楼  实在好厉害 佩服的很
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 15:34:48 | 显示全部楼层
wp231957 发表于 2019-4-23 15:27
2楼 3楼  实在好厉害 佩服的很

学习到了, 我还在想着用numpy转了再减。。晕了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-10 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表