Língua Q - dicionários

Os dicionários são uma extensão das listas que fornecem a base para a criação de tabelas. Em termos matemáticos, o dicionário cria o

“Domínio → intervalo”

ou em geral (resumido) cria

“Chave → valor”

relação entre os elementos.

Um dicionário é uma coleção ordenada de pares chave-valor que é aproximadamente equivalente a uma tabela hash. Um dicionário é um mapeamento definido por uma associação de E / S explícita entre uma lista de domínio e uma lista de intervalo por meio de correspondência posicional. A criação de um dicionário usa a primitiva "xkey" (!)

ListOfDomain ! ListOfRange

O dicionário mais básico mapeia uma lista simples para uma lista simples.

Entrada (I) Saída (O)
`Nome `John
`Idade 36
`Sexo “M”
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

Olho para cima

Encontrar o valor de saída do dicionário correspondente a um valor de entrada é chamado looking up a 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"

Pesquisa com Verbo @

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

q)d1[`two]
18

q)[email protected]`two
18

Operações em dicionários

Emendar e Upsert

Tal como acontece com as listas, os itens de um dicionário podem ser modificados por meio de atribuição 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

Os dicionários podem ser estendidos por meio da atribuição de índice.

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

q)d

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

Pesquisa reversa com Localizar (?)

O operador find (?) É usado para realizar pesquisa reversa mapeando uma gama de elementos para seu elemento de domínio.

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

q)d2?77
`z

Caso os elementos de uma lista não sejam únicos, o find retorna o primeiro mapeamento de item da lista de domínio.

Removendo entradas

Para remover uma entrada de um dicionário, o delete ( _ ) functioné usado. O operando esquerdo de (_) é o dicionário e o operando direito é um valor-chave.

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

q)d2 _`z

x| 99
y| 88

É necessário espaço em branco à esquerda de _ se o primeiro operando for uma variável.

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

z| 77

Dicionários de coluna

Dicionários de coluna são básicos para a criação de tabelas. Considere o seguinte exemplo -

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

Invertendo um dicionário

O efeito líquido de inverter um dicionário de colunas é simplesmente inverter a ordem dos índices. Isso é logicamente equivalente a transpor as linhas e colunas.

Flip em um dicionário de coluna

A transposição de um dicionário é obtida aplicando o operador unário flip. Dê uma olhada no seguinte exemplo -

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

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

Inverter um dicionário de coluna invertido

Se você transpõe um dicionário duas vezes, obtém o dicionário original,

q)scores ~ flip flip scores
1b