Python 用对应于每个字符串的数字替换字典中的元组值(字符串)?

Python 用对应于每个字符串的数字替换字典中的元组值(字符串)?,python,dictionary,tuples,key,key-value-store,Python,Dictionary,Tuples,Key,Key Value Store,我有一个dict,看起来像这样,其中的值是字符串元组,对应于某个浮点数: first_dict = {('item1', 'item2'): 3.6, ('item1', 'item3'): 7.0, ('item1', 'item4'): 1.3} 然后我有第二个dict,其中每个项(第一个dict中元组的一部分)都被分配一个数字: second_dict = {'item1': 0, 'item2': 1, 'item3': 2, 'item4': 3, 'item5': 4} 现在我要

我有一个dict,看起来像这样,其中的值是字符串元组,对应于某个浮点数:

first_dict = {('item1', 'item2'): 3.6, ('item1', 'item3'): 7.0, ('item1', 'item4'): 1.3}
然后我有第二个dict,其中每个项(第一个dict中元组的一部分)都被分配一个数字:

second_dict = {'item1': 0, 'item2': 1, 'item3': 2, 'item4': 3, 'item5': 4}
现在我要做的是用第二个dict中的值(数字索引)替换第一个dict中的元组。因此,我应该得到:

final_dict = {(0, 1): 3.6, (0, 2): 7.0, (0, 3): 1.3}
这背后的想法是,可以在矩阵中以行/列的形式输入reach元组


我知道元组是不可变的,所以我需要创建一个新的dict来实现这一点。起初我认为我可以迭代第一个dict中的元组,然后将它们匹配到第二个dict,然后使用这些匹配创建第三个dict。然而,这似乎是不必要的,因为dicts的要点是不必循环/迭代它们。

您可以使用字典理解:

first_dict = {('item1', 'item2'): 3.6, ('item1', 'item3'): 7.0, ('item1', 'item4'): 1.3}
second_dict = {'item1': 0, 'item2': 1, 'item3': 2, 'item4': 3, 'item5': 4}
final_dict = {tuple(second_dict[i] for i in a):b for a, b in first_dict.items()}
输出:

{(0, 1): 3.6, (0, 2): 7.0, (0, 3): 1.3}

使用字典理解

Ex:

first_dict = {('item1', 'item2'): 3.6, ('item1', 'item3'): 7.0, ('item1', 'item4'): 1.3}
second_dict = {'item1': 0, 'item2': 1, 'item3': 2, 'item4': 3, 'item5': 4}

final_dict = {(second_dict.get(k[0]), second_dict.get(k[1])) :v for k, v in first_dict.items() }
print(final_dict)
{(0, 1): 3.6, (0, 2): 7.0, (0, 3): 1.3}
输出:

first_dict = {('item1', 'item2'): 3.6, ('item1', 'item3'): 7.0, ('item1', 'item4'): 1.3}
second_dict = {'item1': 0, 'item2': 1, 'item3': 2, 'item4': 3, 'item5': 4}

final_dict = {(second_dict.get(k[0]), second_dict.get(k[1])) :v for k, v in first_dict.items() }
print(final_dict)
{(0, 1): 3.6, (0, 2): 7.0, (0, 3): 1.3}
这里

输出

{(0, 1): 3.6, (0, 2): 7.0, (0, 3): 1.3}

使用解包更干净:
{(second_dict[j],second_dict[k]):v表示(j,k),v表示first_dict.items()}
您必须迭代