亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何壓縮兩個字典中的值

如何壓縮兩個字典中的值

元芳怎么了 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 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號