Извлечь значение по ключу из двух вложенных словарей

У меня есть два json файла.
В первом структура имеет следующий вид:

{
"44665" : {
    "id" : 44665,
    "name" : "Type1",
    "type" : "DOUBLE",
    "scanClass" : "default",
    "instrumentTag" : "2049",
    "exceptionMin" : 0,
    "exceptionMax" : 30000000000,
    "exceptionDeviation" : 0.001,
    "isCompressed" : true,
    "additionalAttributes" : { }
  },
  "44666" : {
    "id" : 44666,
    "name" : "Type2",
    "type" : "DOUBLE",
    "scanClass" : "default",
    "instrumentTag" : "2050",
    "exceptionMin" : 0,
    "exceptionMax" : 30000000000,
    "exceptionDeviation" : 0.001,
    "isCompressed" : true,
    "additionalAttributes" : { }
  },
  "44671" : {
    "id" : 44671,
    "name" : "Type3",
    "type" : "DOUBLE",
    "scanClass" : "default",
    "instrumentTag" : "2013",
    "exceptionMin" : 0,
    "exceptionMax" : 30000000000,
    "exceptionDeviation" : 0.001,
    "isCompressed" : true,
    "additionalAttributes" : { }
  }
}

Второй выглядит вот так:

{
  "result" : {
    "45073" : {
      "timestamp" : 1616582519552000000,
      "addedTimestamp" : 1616582533238762700,
      "valueDbl" : 70.22978,
      "valueLong" : null,
      "valueFloat" : null,
      "valueStr" : null,
      "valueBool" : null,
      "replaced" : null,
      "annotation" : null,
      "quality" : 0
    },
    "45074" : {
      "timestamp" : 1616582519552000000,
      "addedTimestamp" : 1616582533238772500,
      "valueDbl" : 60.27541,
      "valueLong" : null,
      "valueFloat" : null,
      "valueStr" : null,
      "valueBool" : null,
      "replaced" : null,
      "annotation" : null,
      "quality" : 0
    },
    "44664" : {
      "timestamp" : 1616582519553000000,
      "addedTimestamp" : 1616582533536364600,
      "valueDbl" : 42.36111,
      "valueLong" : null,
      "valueFloat" : null,
      "valueStr" : null,
      "valueBool" : null,
      "replaced" : null,
      "annotation" : null,
      "quality" : 0
    }
  }
}

Достаю из файлов следующим образом:

with open ('data2.json', 'r', encoding='utf-8') as f:
    with open('data3.json', 'r', encoding='utf-8') as f1:
        text2 = json.loads(f1.read())
    text = json.loads(f.read())

Как извлечь несколько пар ключ-значение из данных словарей и записать в результирующий список, который должен иметь следующий вид

[
{
  "id" : 44665,
  "name" : "Type1",
  "valueDbl" : 70.22978,
}, {
  "id" : 44666,
  "name" : "Type2",
  "valueDbl" : 60.27541,
}, {
  "id" : 44671,
  "name" : "Type3",
  "valueDbl" : 42.36111,
}
]

Ответы (1 шт):

Автор решения: Jack_oS

Прочитать файлы можно в одном контексте:

import json

with open('data2.json', encoding='utf-8') as d2, open('data3.json', encoding='utf-8') as d3:
    data2 = json.loads(d2.read())
    data3 = json.loads(d3.read())['result']

и сформировать новый список словарей:

result = []
for k, v in data2.items():
    result.append({
        'id': k, 
        'name': v['name'], 
        'valueDbl': data3[k]['valueDbl'] if data3.get(k) else None
    })

в котором будут id из data2 или None для valueDbl при несовпадении,

[
    {'id': '44665', 'name': 'Type1', 'valueDbl': 70.22978}, 
    {'id': '44666', 'name': 'Type2', 'valueDbl': None}, 
    {'id': '44671', 'name': 'Type3', 'valueDbl': 42.36111}
]

PS исходные данные изменены, чтоб было два совпадения:

data2 = {'44665': {'id': 44665, 'name': 'Type1', 'type': 'DOUBLE', 'scanClass': 'default', 'instrumentTag': '2049', 'exceptionMin': 0, 'exceptionMax': 30000000000, 'exceptionDeviation': 0.001, 'isCompressed': True, 'additionalAttributes': {}}, '44666': {'id': 44666, 'name': 'Type2', 'type': 'DOUBLE', 'scanClass': 'default', 'instrumentTag': '2050', 'exceptionMin': 0, 'exceptionMax': 30000000000, 'exceptionDeviation': 0.001, 'isCompressed': True, 'additionalAttributes': {}}, '44671': {'id': 44671, 'name': 'Type3', 'type': 'DOUBLE', 'scanClass': 'default', 'instrumentTag': '2013', 'exceptionMin': 0, 'exceptionMax': 30000000000, 'exceptionDeviation': 0.001, 'isCompressed': True, 'additionalAttributes': {}}}
data3 = {'44665': {'timestamp': 1616582519552000000, 'addedTimestamp': 1616582533238762700, 'valueDbl': 70.22978, 'valueLong': None, 'valueFloat': None, 'valueStr': None, 'valueBool': None, 'replaced': None, 'annotation': None, 'quality': 0}, '45074': {'timestamp': 1616582519552000000, 'addedTimestamp': 1616582533238772500, 'valueDbl': 60.27541, 'valueLong': None, 'valueFloat': None, 'valueStr': None, 'valueBool': None, 'replaced': None, 'annotation': None, 'quality': 0}, '44671': {'timestamp': 1616582519553000000, 'addedTimestamp': 1616582533536364600, 'valueDbl': 42.36111, 'valueLong': None, 'valueFloat': None, 'valueStr': None, 'valueBool': None, 'replaced': None, 'annotation': None, 'quality': 0}}
→ Ссылка