es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo construir un diccionario iterado con una globa de archivo de consulta?

Hasta ahora, no he podido encontrar la forma de duplicar mi diccionario actual con la adición de k:v.

Dado este ejemplo de diccionario:

list0:
  ct0:
    entry:
      - dest: /tmp
        owner: u1
        source:

Me gustaría obtener este resultado (obteniendo la ruta de origen con lookup fileglob):

list0:
  ct0:
    entries:
      - dest: /tmp
        owner: u1
        source: /bar/foo2
      - dest: /tmp
        owner: u1
        source: /bar/foo1
      - dest: /tmp
        owner: u1
        source: /bar/foo0

Hasta ahora no he obtenido nada bueno.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para duplicar el diccionario actual con pares adicionales de k:v, puedes usar el método copy() en Jinja2. Aquí tienes un ejemplo:

    {% set new_dict = dict(list0) %}
    
    {% set file_list = lookup('fileglob', '/bar/foo*') %}
    
    {% for file in file_list %}
      {% set entry = {'dest': '/tmp', 'owner': 'u1', 'source': file} %}
      {% set _ = new_dict['ct0']['entries'].append(entry) %}
    {% endfor %}
    
    {{ new_dict }}
    

    Aquí, primero creamos una copia del diccionario list0 utilizando dict(list0) y lo almacenamos en una nueva variable llamada new_dict. Luego, usamos el plugin de búsqueda fileglob para obtener una lista de archivos que coinciden con el patrón /bar/foo* (asumiendo que los archivos existen en la máquina anfitrión).

    A continuación, recorremos la lista de archivos y creamos un nuevo diccionario entry con los pares k:v requeridos. Luego, añadimos este diccionario a la lista entries en new_dict utilizando new_dict['ct0']['entries'].append(entry).

    Finalmente, mostramos el new_dict actualizado usando {{ new_dict }}.

    Esto debería darte la salida deseada como se muestra en el ejemplo.

Comments are closed.