簡體   English   中英

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

[英]What's the best way to map a dict value to another dict

我想知道將2個dict1 = {k1: v1, k2: v2, ...}合並為一個dict的最佳方法是: dict1 = {k1: v1, k2: v2, ...}dict2 = {v1: w1, v2: w2, ...} into result = {k1: w1, k2: w2, ...}

我已經有了使用dict理解的解決方案:

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

但我不認為這是最優雅的方式。 你能幫我么 ?

對於雙字典案例,你的字典理解很好。 這是假設你能保證你的價值觀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'}

作為替代/擴展,對於@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或添加條件。

>>> 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這種變體(可能根本不需要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM