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

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

將字典值映射到另一個字典的最佳方法是什么

將字典值映射到另一個字典的最佳方法是什么

狐的傳說 2021-10-26 18:07:48
我想知道什么是2種類型的字典合并成一個字典如下的最佳方式: dict1 = {k1: v1, k2: v2, ...}和dict2 = {v1: w1, v2: w2, ...}成 result = {k1: w1, k2: w2, ...}我已經有了一個使用 dict comprehension 的解決方案:result = {   k: dict2[v]   for k, v in dict1.items()}但我認為這不是最優雅的方式。你能幫我么 ?
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

作為替代/擴展,對于@jpp 的回答,您還可以使用reduce/functools.reduce來獲得更簡潔的chainer函數形式:


from functools import reduce

def chainer(first, *others):

    return {k: reduce(lambda x, d: d[x], others, v) for k, v in first.items()}

哪個更好主要是品味問題;用法和結果是一樣的。


僅就兩本詞典而言,您的詞典理解力就是最好的和優雅的。不過,您可能想要使用get或添加條件,以防第二個 dict 中不存在鍵。


>>> dict1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

>>> dict2 = {'v1': 'w1', 'v2': 'w2'}

>>> {k: dict2.get(v, 'undefined') for k, v in dict1.items()}

{'k1': 'w1', 'k2': 'w2', 'k3': 'undefined'}

>>> {k: dict2[v] for k, v in dict1.items() if v in dict2}

{'k1': 'w1', 'k2': 'w2'}

將這樣的保護措施添加到 中chainer涉及更多,特別是對于使用此變體reduce(并且可能根本不需要)。


查看完整回答
反對 回復 2021-10-26
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

對于兩個字典的情況,您的字典理解很好。這假設您可以保證您的值dict1是 中的鍵dict2。


考慮如何將其擴展到任意字典輸入,您可以使用for循環:


dict1 = {'k1': 'v1', 'k2': 'v2'}

dict2 = {'v1': 'w1', 'v2': 'w2'}

dict3 = {'w1': 'x1', 'w2': 'x2'}


def chainer(first, *others):

    res = first.copy()  # make a copy to avoid overwriting dict1

    for k, v in res.items():

        for dct in others:

            v = dct[v]

        res[k] = v

    return res


res = chainer(dict1, dict2, dict3)

# {'k1': 'x1', 'k2': 'x2'}


查看完整回答
反對 回復 2021-10-26
  • 2 回答
  • 0 關注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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