У меня есть 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}

Теперь я хочу заменить кортежи в first_dict его значением (индекс числа) в second_dict. Итак, я должен в конечном итоге:

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

Идея, лежащая в основе этого, заключается в том, что можно ввести кортеж досягаемости в виде строки / столбца в матрице.

Я знаю, что кортежи неизменны, поэтому мне нужно создать новый дикт для этого. Сначала я думал, что мог бы перебрать кортежи в first_dict, а затем сопоставить их до second_dict, а затем создать третий_дикт, используя эти совпадения. Тем не менее, это кажется ненужным, так как весь смысл диктовок заключается в том, что им не нужно их циклически повторять.

0
J. P. 3 Июл 2019 в 20:49

3 ответа

Лучший ответ

Вот

final_dict = {(second_dict[k[0]], second_dict[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
balderman 3 Июл 2019 в 17:58

Вы можете использовать словарь понимания:

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}
1
Ajax1234 3 Июл 2019 в 17:51

Использование словарного понимания

< Сильный > Пример:

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
Rakesh 3 Июл 2019 в 17:52