Вы можете попробовать зациклить пересекающиеся ключи, а затем добавить результаты в словарь в зависимости от ваших условий:
from pprint import pprint
Runid1 = {
"test1": {"r1": 6.0, "r2": 1.0, "r3": 3.0, "r4": 116.0, "r5": 80.0},
"test2": {"r1": 5.0, "r2": 1.0, "r3": 1.0, "r4": 1.0, "r5": 80.0},
"test3": {"r1": 5.0, "r2": 11.0, "r3": 50.0, "r4": 80.0, "r5": 20.0},
"test4": {"r1": 7.0, "r2": 9.0, "r3": 5.0, "r4": 1.0, "r5": 80.0},
}
Runid2 = {
"test1": {"r1": 1.0, "r2": 1.0, "r3": 2.0, "r4": 75.0, "r5": 79.0},
"test5": {"r1": 1.0, "r2": 1.0, "r3": 1.0, "r4": 1.0, "r5": 80.0},
"test3": {"r1": 2.0, "r2": 10.0, "r3": 45.0, "r4": 60.0, "r5": 80.0},
"test4": {"r1": 1.0, "r2": 1.0, "r3": 1.0, "r4": 1.0, "r5": 80.0},
}
result = {}
for key in Runid1.keys() & Runid2.keys():
result[key] = {}
for k1, k2 in zip(Runid1[key], Runid2[key]):
v1, v2 = Runid1[key][k1], Runid2[key][k2]
if v1 < 10 and v2 < 10 and abs(v1 - v2) >= 4:
result[key][k1] = [v1, v2]
pprint(result)
Что дает следующее:
{'test1': {'r1': [6.0, 1.0]},
'test3': {},
'test4': {'r1': [7.0, 1.0], 'r2': [9.0, 1.0], 'r3': [5.0, 1.0]}}
ОднакоПриведенный выше подход предполагает упорядочение ключей с zip()
, что гарантировано только в Python3.6 + .
Если вы использовали более низкие версии Python, то нам нужносначала проверить, существует ли ключ из первого словаря во втором словаре:
result = {}
for key in Runid1.keys() & Runid2.keys():
result[key] = {}
for k1, v1 in Runid1[key].items():
if k1 in Runid2[key]:
v2 = Runid2[key][k1]
if v1 < 10 and v2 < 10 and abs(v1 - v2) >= 4:
result[key][k1] = [v1, v2]