Самый элегантный способ объединить два словаря с одним и тем же ключом.Python

Программы на Python
Anonymous
Самый элегантный способ объединить два словаря с одним и тем же ключом.

Сообщение Anonymous »

Я работаю над моделями в масштабе генома и пытаюсь создать минимальную среду, которая удовлетворяет двум оптимальным условиям потока. Я получаю два словаря с необходимыми компонентами носителя, которые выглядят так:

Код: Выделить всё

EX_C00001_ext_b     1.132993
EX_C00011_ext_b     1.359592
EX_E1_ext_b        16.000000

EX_C00034_ext_b      0.000088
EX_C00244_ext_b      0.259407
EX_C00182N_cyt_b     0.006079
EX_C00009_ext_b      0.020942
EX_C01330_ext_b      0.000110
EX_C00080_ext_b      0.258331
EX_C00001_ext_b      0.780699
EX_C14819_ext_b      0.000197
EX_C00059_ext_b      0.005162
EX_C00011_ext_b      1.198398
EX_C14818_ext_b      0.000217
EX_C00305_ext_b      0.000802
EX_C00038_ext_b      0.000088
EX_C00070_ext_b      0.000088
EX_C06232_ext_b      0.000088
EX_C00076_ext_b      0.000131
EX_C00238_ext_b      0.004925
EX_E1_ext_b         16.000000
EX_C00175_ext_b      0.000094
Я хочу объединить оба словаря, чтобы выбрать максимальное значение для каждого метаболита самым элегантным способом, и его можно будет использовать независимо от размера словаря.
Это должно дать мне следующий результат:

Код: Выделить всё

EX_C00034_ext_b      0.000088
EX_C00244_ext_b      0.259407
EX_C00182N_cyt_b     0.006079
EX_C00009_ext_b      0.020942
EX_C01330_ext_b      0.000110
EX_C00080_ext_b      0.258331
EX_C00001_ext_b      1.132993
EX_C14819_ext_b      0.000197
EX_C00059_ext_b      0.005162
EX_C00011_ext_b      1.359592
EX_C14818_ext_b      0.000217
EX_C00305_ext_b      0.000802
EX_C00038_ext_b      0.000088
EX_C00070_ext_b      0.000088
EX_C06232_ext_b      0.000088
EX_C00076_ext_b      0.000131
EX_C00238_ext_b      0.004925
EX_E1_ext_b         16.000000
EX_C00175_ext_b      0.000094
Вот примеры диктовок, которые вы можете использовать.

Код: Выделить всё

{'EX_C00034_ext_b': 8.757888959017035e-05, 'EX_C00244_ext_b': 0.2594073529471562, 'EX_C00182N_cyt_b': 0.006078784247428623, 'EX_C00009_ext_b': 0.02094224214212716, 'EX_C01330_ext_b': 0.00010954587179767827, 'EX_C00080_ext_b': 0.2583314448433369, 'EX_C00001_ext_b': 0.7806992563484072, 'EX_C14819_ext_b': 0.00019712476138777617, 'EX_C00059_ext_b': 0.005162038491279668, 'EX_C00011_ext_b': 1.1983981620820985, 'EX_C14818_ext_b': 0.00021724189246195394, 'EX_C00305_ext_b': 0.0008020492051022175, 'EX_C00038_ext_b': 8.757888959017035e-05, 'EX_C00070_ext_b': 8.757888959017036e-05, 'EX_C06232_ext_b': 8.757888959017035e-05, 'EX_C00076_ext_b': 0.00013122381476546977, 'EX_C00238_ext_b': 0.0049252286422986884, 'EX_E1_ext_b': 16.000000000000245, 'EX_C00175_ext_b': 9.42845999482296e-05}

{'EX_C00001_ext_b': 1.1329932376320115, 'EX_C00011_ext_b': 1.3595918851584152, 'EX_E1_ext_b': 16.000000000000387}
Обратите внимание, что я не знаю, в каком из словарей находятся более высокие значения.
РЕДАКТИРОВАТЬ
Как видно из моего примера, хотя оба словаря содержат одни и те же ключи, не все ключи присутствуют в обоих словарях. Поэтому я не могу перебирать ключи, так как не знаю, пропущу ли я один из ключей.
Я думаю, вы могли бы сначала создать набор всех ключей из всех словарей, которые мне нужно объединить, но я не уверен, что это хороший способ.
Да, следует сохранять только самое высокое значение.
EDIT 2< /p>
К сожалению, после обновления носителя таким образом я получаю ошибку

TypeError: в методе «Reaction_setReversible», аргумент 2 из введите «bool»

когда я пытаюсь записать модель с обновленным носителем в XML-файл.
Последнее EDIT
Если кто-то столкнется с той же проблемой, вам просто нужно указать, что значения являются числами с плавающей запятой. После этого все заработало.

Подробнее здесь: https://stackoverflow.com/questions/591 ... e-same-key

Вернуться в «Python»