猿问

如何压缩两个字典中的值

我有两本字典:


{('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}

实现这一目标的最佳方法是什么?


元芳怎么了
浏览 181回答 3
3回答

精慕HU

在 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将该结构用作或实现为元组列表,以确保始终进行正确的配对

当年话下

我不太确定你在说什么,但以下内容与你所描述的类似: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')}

慕丝7291255

在 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'))]创建您的新 dictIn [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')}
随时随地看视频慕课网APP

相关分类

Python
我要回答