¿Cómo puedo agregar nuevas marcas de tiempo como json anidado en value_map
si las otras claves en la lista son las mismas? A continuación se muestra la lista de ejemplos de dictados.
dicts = [{
"key": "v3_CA125_2019-09-19",
"sn": "M9257",
"value_map": {
"06:59:59": {
"V_615": "1",
"V_616": "2",
}
}
},
{
"key": "v3_CA125_2019-09-19",
"sn": "M9257",
"value_map": {
"10:59:59": {
"V_613": "30",
"V_614": "22"
}
}
},
{
"key": "v3_CA125_2019-09-23",
"sn": "M9257",
"value_map": {
"12:59:59": {
"V_615": "33"
}
}
},
{
"key": "v3_CA125_2019-09-23",
"sn": "M9257",
"value_map": {
"09:59:59": {
"V_602": "0.208984375"
}
}
}
]
Intento tener una salida como:
dicts = [{
"key": "v3_CA125_2019-09-19",
"sn": "M9257",
"value_map": {
"06:59:59": {
"V_615": "1",
"V_616": "2",
},
"10:59:59": {
"V_613": "30",
"V_614": "22"
}
}
},
{
"key": "v3_CA125_2019-09-23",
"sn": "M9257",
"value_map": {
"12:59:59": {
"V_615": "33"
},
"09:59:59": {
"V_602": "0.208984375"
}
}
}
]
Traté de agregar value_map
con OrderedDict
pero no pude alcanzar algo hasta ahora. ¿Alguna sugerencia?
from collections import OrderedDict
d = OrderedDict()
for l in dicts :
d.setdefault((l['partition_key'], l['sort_key'], l['sn']), set()).add(l['value_map'])
result = [{'partition_key': k[0], 'sort_key': k[1], 'sn':k[2], 'value_map': v.pop() if len(v) == 1 else v} for k, v in d.items()]
4 respuestas
key_to_index_map ={} # to know when we saw the object with a given key
desired_list = []
for elem in dicts:
key = elem['key']
# append if you see another object with same key
if key in key_to_index_map:
value_map = desired_list[key_to_index_map[key]]["value_map"]
value_map.update(elem['value_map']);
desired_list[key_to_index_map[key]]['value_map'] = value_map;
else: # or simply add to the final list
desired_list.append(elem);
key_to_index_map[key] = len(desired_list)-1;
La "fusión de JSON" o la combinación de valores de dos objetos dict en Python se pueden hacer con el desempaquetado utilizando el operador **
.
En las siguientes líneas puede encontrar un ejemplo simple en el que puede observar el comportamiento y utilizarlo según sea necesario en su problema.
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
d3 = {**d1, **d2}
d3 # Output
{'a': 1, 'b': 3, 'c': 4}
d4 = {**d2, **d1}
d4 # Output
{'b': 2, 'c': 4, 'a': 1}
Tiene el value_map como una lista mientras necesita un diccionario.
Su atributo value_map debe ser una matriz []
en lugar de un dict {}
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.