list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}]

id = 1
tag = 'tag10'

"""
#for i element in list, if list[i]['id'] == 1, update list[i][tags].append(tag)
else:
    dic = {'id': id, 'tags': [tag]}
    list.append(dic)
"""

Necesito verificar si en la lista de diccionarios ya existe un diccionario con id = 1, y si existe, agregue la variable de etiqueta a su lista de etiquetas, de lo contrario, cree un nuevo dic y añádalo a la lista.

El script debe actualizar la lista como:

list = [{'id': 1, 'tags': ['tag1', 'tag2', 'tag10']}, {'id': 2, 'tags': ['tag5', 'tag7']}]
1
Hyperion 16 feb. 2017 a las 20:21

3 respuestas

La mejor respuesta

Recorra los dictados de la lista. En cada iteración, verifique si hay una clave llamada 'id'. Si es así, tome el valor de la clave 'etiquetas' del mismo dict y agregue su etiqueta.

my_list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}]

id = 1
tag = 'tag10'

for a_dict in my_list:
    if a_dict.get('id', 0) == id:
        a_dict['tags'].append(tag)

Si sabe que esto puede suceder solo en uno de sus dictados, puede agregar un break en el código para que no se repita en el resto de los em.

El mismo comportamiento se puede lograr con una lista de comprensión de listas no asignada:

[a_dict['tags'].append(tag) for a_dict in my_list if a_dict.get('id', 0) == id]
3
Ev. Kounis 16 feb. 2017 a las 17:26

Esto debería hacer lo que quieras

my_list = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}]

target_id = 1
tag = 'tag10'

for dictionary in my_list:
     current_id = dictionary[id]
     if current_id == target_id:
          dictionary['tags'] = tag
     else:
          my_list.append({'id': target_id, tags: [tag]})
0
Mike Tung 16 feb. 2017 a las 17:30
lst = [{'id': 1, 'tags': ['tag1', 'tag2']}, {'id': 2, 'tags': ['tag5', 'tag7']}]
id_ = 1
tag = 'tag10'

# iterate through the list; each item in list is a dict
for  item in lst:
    # check if reqd id_ is present in the dict
    if item['id'] == id_:
      # check if tags key is present in the dict
      # if yes append to the list
      if 'tags' in item.keys():
        item['tags'].append(tag)
    else:
      item['tags'] = tag

print lst
1
Rohan Sadale 17 feb. 2017 a las 06:45