链接两个python字典

链接两个python字典,python,dictionary,Python,Dictionary,我正在努力编写将两个python字典链接在一起的代码: d1 = {'a':'Apple','b':'Banana'} d2 = {'Apple':'Pomme','Banana':'Banane'} 我想创建一个新的字典d3,其中“a”是值“Pomme”的键,“b”是值“Banane”的键 d3 = {'a':'Pomme','b':'Banane'} 任何指导都将不胜感激 使用字典理解: d3 = {k: d2[v] for k, v in d1.items()} 如果需要动态链接,意

我正在努力编写将两个python字典链接在一起的代码:

d1 = {'a':'Apple','b':'Banana'}
d2 = {'Apple':'Pomme','Banana':'Banane'}
我想创建一个新的字典d3,其中“a”是值“Pomme”的键,“b”是值“Banane”的键

d3 = {'a':'Pomme','b':'Banane'}

任何指导都将不胜感激

使用字典理解:

d3 = {k: d2[v] for k, v in d1.items()}
如果需要动态链接,意味着如果希望新映射反映对原始dict所做的更改,则可以从
collections.abc.mapping

class DLinker(collections.abc.Mapping):
    def __init__(self, d1, d2):
        self.d1 = d1
        self.d2 = d2
    def __len__(self):
        return len(self.d1)
    def __getitem__(self, item):
        return d2[d1[item]]
    def __iter__(self):
        return iter(d1)
然后,您可以使用:

>>> d3 = DLinker(d1, d2)
>>> for i in d3:
    print(i, d3[i])


a Pomme
b Banane
>>> d1['c'] = 'Pear'
>>> d2['Pear'] = 'Poire'
>>> d3['c']
'Poire'

为了OP的利益,此方法的结果
d3
不是
dict
,而是
collections.abc.Mapping
的子类。说到这里,您将发现
dict
的大部分好处。对于不想重复数据的非常大的字典,这将是有效的。但对于需要两次查找的小型词典,效率较低。