Tengo un caso en el que necesito para construir siguiente estructura mediante programación (sí, soy consciente de .setdefault y defaultdict, pero no puedo obtener lo que quiero)

Yo, básicamente, se necesita un diccionario, un diccionario de diccionarios creados dentro del bucle.
Al principio, la estructura está completamente en blanco.

estructura de la muestra (por favor nota, quiero crear una matriz que tiene esta estructura en el código!)

RULE = {
     'hard_failure': {
        4514 : {
           'f_expr' = 'ABC',
           'c_expr' = 'XF0',
     }
    }
   }

pseudo código que necesita para crear este:

...
self.rules = {}
for row in rows:
     a = 'hard_failure'
     b = row[0] # 4514
     c = row[1] # ABC
     d = row[2] # XF0
     # Universe collapse right after
     self.rules = ????
...   

El código anterior es, obviamente, no funciona ya que no sé cómo hacerlo!

  • tu ejemplo no es válido python
  • Tratar de ser más claro, la estructura de la muestra no tiene ningún sentido. Usted no puede utilizar 4514 : {} sintaxis dentro de corchetes.

5 Comentarios

  1. 5

    Ejemplo, que ha publicado no es válido el código de python, sólo podía imaginar que usted está tratando de hacer algo como esto:

    self.rules[a] = [{b:{'f_expr': c, 'c_expr': d}}]

    de esta manera self.rules es un diccionario de una lista de un diccionario de un diccionario. Apuesto a que hay más sana manera de hacer esto.

    • +1 para «apuesto a que hay más cuerdo manera»
  2. 1
    rules = {}
    failure = 'hard_failure'
    rules[failure] = []
    for row in rows:
      #this is what people are referring to below.  You left out the addition of the    dictionary structure to the list.
      rules[failure][row[0]] = {} 
      rules[failure][row[0]]['type 1'] = row[1]
      rules[failure][row[0]]['type 2'] = row[2]

    Esto es lo que yo crea en base a lo que yo entendí la pregunta. Yo no estaba seguro de lo que llamamos la «f_expr’ y ‘c_expr» ya que nunca se menciona donde conseguir esos pero supongo que ya se conocen los nombres de columna en un conjunto de resultados o de la estructura de algún tipo.

    Sólo seguir añadiendo a la estructura a medida que usted vaya.

  3. 0

    Su código de ejemplo no parece ser válida para Python. No está claro si el segundo elemento de nivel se supone que es una lista o un diccionario.

    Sin embargo, si usted está haciendo lo que creo que está haciendo, y es un diccionario, usted podría usar una tupla como clave en el nivel superior diccionario en lugar de anidación de diccionarios:

    >>> a = 'hard_failure'
    >>> b = 4514
    >>> c = "ABC"
    >>> d = "XF0"
    >>> rules = {}
    >>> rules[(a,b)] = {'f_expr' : a,'c_expr' : d}
    >>> rules
    {('hard_failure', 4514): {'c_expr': 'XF0', 'f_expr': 'hard_failure'}}
  4. 0

    Bien, me disculpo por la confusión, nunca dije que el código compilado, por lo tanto (pseudo). Arthur Thomas me puso sobre la pista de la derecha, aquí es versión ligeramente modificada. (Sí, ahora es un simplemente anidada diccionario, 3 niveles hacia abajo)

        RULE_k = 'hard_failure'
        self.rules = {}
        for row in rows:
               self.rules_compiled.setdefault(RULE_k, {})
               self.rules_compiled[RULE_k][row[1]] = {}
               self.rules_compiled[RULE_k][row[1]]['f_expr'] = row[0]
               self.rules_compiled[RULE_k][row[1]]['c_expr'] = row[1]
    • Forma correcta de manejar esta en Stack Overflow es editar tu pregunta para aclarar todo el asunto, en lugar de poner en una «respuesta» que no puede ser una respuesta. Si esto es realmente una respuesta, a continuación, acepte haciendo clic en el icono de marca de verificación a la izquierda. De lo contrario, la gente que viene aquí más tarde no tienes ni idea de lo que estás haciendo.

Dejar respuesta

Please enter your comment!
Please enter your name here