为了账号安全,请及时绑定邮箱和手机立即绑定

如何压缩两个字典中的值

如何压缩两个字典中的值

元芳怎么了 2021-08-24 18:17:57
我有两本字典:{('x0', '0'): 'x0', ('x0', '1'): 'x1', ('x1', '0'): 'x1', ('x1', '1'): 'x0'}和{('y0', '0'): 'y1', ('y0', '1'): 'y1', ('y1', '0'): 'y0', ('y1', '1'): 'y0'}我想以这种方式压缩它们,以便结果是:{(('x0','y0'), 0) : ('x0','y1'), (('x0', 'y0'), 1) : ('x1, 'y1')... and so on}实现这一目标的最佳方法是什么?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

在 Python3.7 字典中是有序的,因此,您可以迭代dict.items():


d1 = {('x0', '0'): 'x0', ('x0', '1'): 'x1', ('x1', '0'): 'x1', ('x1', '1'): 'x0'}

d2 = {('y0', '0'): 'y1', ('y0', '1'): 'y1', ('y1', '0'): 'y0', ('y1', '1'): 'y0'}

new_d = {((c, d), b):(a, e) for ([c, b], a), ([d, _], e) in zip(d1.items(), d2.items())}

输出:


{(('x0', 'y0'), '0'): ('x0', 'y1'), (('x0', 'y0'), '1'): ('x1', 'y1'), (('x1', 'y1'), '0'): ('x1', 'y0'), (('x1', 'y1'), '1'): ('x0', 'y0')}

但是,此解决方案仅适用于 Python3.7。要在任何其他版本中使用,请考虑collections.OrderedDict将该结构用作或实现为元组列表,以确保始终进行正确的配对


查看完整回答
反对 回复 2021-08-24
?
当年话下

TA贡献1890条经验 获得超9个赞

我不太确定你在说什么,但以下内容与你所描述的类似:


a = {('x0', '0'): 'x0', ('x0', '1'): 'x1', ('x1', '0'): 'x1', ('x1', '1'): 'x0'}

b = {('y0', '0'): 'y1', ('y0', '1'): 'y1', ('y1', '0'): 'y0', ('y1', '1'): 'y0'}

{((x[0], y[0]), x[1]): (a[x], b[y]) for x, y in zip(a.keys(), b.keys())}

>> {(('x0', 'y0'), '0'): ('x0', 'y1'), (('x0', 'y0'), '1'): ('x1', 'y1'), (('x1', 'y1'), '0'): ('x1', 'y0'), (('x1', 'y1'), '1'): ('x0', 'y0')}



查看完整回答
反对 回复 2021-08-24
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

在 Python 3.7 之前,dict.items没有排序,但这并不意味着您不能自己排序!


确认它是无序的(Python 3.5)


In [132]: list(zip(x.items(), y.items()))

Out[132]:

[((('x0', '0'), 'x0'), (('y0', '1'), 'y1')),

 ((('x1', '0'), 'x1'), (('y1', '0'), 'y0')),

 ((('x0', '1'), 'x1'), (('y0', '0'), 'y1')),

 ((('x1', '1'), 'x0'), (('y1', '1'), 'y0'))]

明确订购


In [129]: list(zip(sorted(x.items()), sorted(y.items())))

Out[129]:

[((('x0', '0'), 'x0'), (('y0', '0'), 'y1')),

 ((('x0', '1'), 'x1'), (('y0', '1'), 'y1')),

 ((('x1', '0'), 'x1'), (('y1', '0'), 'y0')),

 ((('x1', '1'), 'x0'), (('y1', '1'), 'y0'))]

创建您的新 dict


In [131]: {((x0, y0), x1): (x, y) for ((x0, x1), x), ((y0, y1), y) in zip(sorted(x.items()), sorted(y.items()))}


Out[131]:

{(('x0', 'y0'), '0'): ('x0', 'y1'),

 (('x0', 'y0'), '1'): ('x1', 'y1'),

 (('x1', 'y1'), '0'): ('x1', 'y0'),

 (('x1', 'y1'), '1'): ('x0', 'y0')}


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号