Q Language - Diccionarios

Los diccionarios son una extensión de listas que proporcionan la base para la creación de tablas. En términos matemáticos, el diccionario crea el

"Dominio → Rango"

o en general (corto) crea

"Clave → valor"

relación entre elementos.

Un diccionario es una colección ordenada de pares clave-valor que equivale aproximadamente a una tabla hash. Un diccionario es un mapeo definido por una asociación de E / S explícita entre una lista de dominio y una lista de rango a través de correspondencia posicional. La creación de un diccionario utiliza la primitiva "xkey" (!)

ListOfDomain ! ListOfRange

El diccionario más básico asigna una lista simple a una lista simple.

Entrada (I) Salida (O)
`Nombre Juan
Edad 36
Sexo "METRO"
Peso 60,3
q)d:`Name`Age`Sex`Weight!(`John;36;"M";60.3)   / Create a dictionary d

q)d

Name   | `John
Age    | 36
Sex    | "M"
Weight | 60.3

q)count d             / To get the number of rows in a dictionary.
4

q)key d               / The function key returns the domain
`Name`Age`Sex`Weight

q)value d             / The function value returns the range.

`John
36

"M"
60.3

q)cols d             / The function cols also returns the domain.
`Name`Age`Sex`Weight

Buscar

Encontrar el valor de salida del diccionario correspondiente a un valor de entrada se llama looking up la entrada.

q)d[`Name]       / Accessing the value of domain `Name
`John

q)d[`Name`Sex]   / extended item-wise to a simple list of keys
`John
"M"

Búsqueda con Verbo @

q)d1:`one`two`three!9 18 27

q)d1[`two]
18

q)[email protected]`two
18

Operaciones en diccionarios

Modificar y reafirmar

Al igual que con las listas, los elementos de un diccionario se pueden modificar mediante asignación indexada.

d:`Name`Age`Sex`Weight! (`John;36;"M";60.3)
                                  / A dictionary d
                                  
q)d[`Age]:35                      / Assigning new value to key Age

q)d 
                              / New value assigned to key Age in d
Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3

Los diccionarios se pueden ampliar mediante la asignación de índices.

q)d[`Height]:"182 Ft"

q)d

Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3
Height | "182 Ft"

Búsqueda inversa con Buscar (?)

El operador de búsqueda (?) Se utiliza para realizar una búsqueda inversa mediante la asignación de un rango de elementos a su elemento de dominio.

q)d2:`x`y`z!99 88 77

q)d2?77
`z

En caso de que los elementos de una lista no sean únicos, el find devuelve el primer mapeo de elementos de la lista de dominios.

Eliminar entradas

Para eliminar una entrada de un diccionario, el delete ( _ ) functionse utiliza. El operando izquierdo de (_) es el diccionario y el operando derecho es un valor clave.

q)d2:`x`y`z!99 88 77

q)d2 _`z

x| 99
y| 88

Se requiere un espacio en blanco a la izquierda de _ si el primer operando es una variable.

q)`x`y _ d2           / Deleting multiple entries

z| 77

Diccionarios de columna

Los diccionarios de columnas son los conceptos básicos para la creación de tablas. Considere el siguiente ejemplo:

q)scores: `name`id!(`John`Jenny`Jonathan;9 18 27)
                              / Dictionary scores
                              
q)scores[`name]               / The values for the name column are
`John`Jenny`Jonathan

q)scores.name                 / Retrieving the values for a column in a
                              / column dictionary using dot notation.
`John`Jenny`Jonathan

q)scores[`name][1]            / Values in row 1 of the name column
`Jenny

q)scores[`id][2]              / Values in row 2 of the id column is
27

Pasar un diccionario

El efecto neto de voltear un diccionario de columnas es simplemente invertir el orden de los índices. Esto es lógicamente equivalente a transponer filas y columnas.

Voltear en un diccionario de columna

La transposición de un diccionario se obtiene aplicando el operador flip unario. Eche un vistazo al siguiente ejemplo:

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

  name     id
---------------
  John     9
  Jenny    18
 Jonathan  27

Voltear un diccionario de columna invertida

Si transpone un diccionario dos veces, obtiene el diccionario original,

q)scores ~ flip flip scores
1b