📅  最后修改于: 2020-11-03 06:45:18             🧑  作者: Mango
字典是列表的扩展,它为创建表提供了基础。用数学术语,字典创建
“域→范围”
或通常(简短)创建
“键→值”
元素之间的关系。
字典是键-值对的有序集合,它大致等效于哈希表。字典是由域列表和范围列表之间通过位置对应关系的显式I / O关联定义的映射。字典的创建使用“ xkey”原语(!)
ListOfDomain ! ListOfRange
最基本的字典将一个简单列表映射到一个简单列表。
Input (I) | Output (O) |
---|---|
`Name | `John |
`Age | 36 |
`Sex | “M” |
Weight | 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
查找与输入值相对应的字典输出值称为查找输入。
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"
q)d1:`one`two`three!9 18 27
q)d1[`two]
18
q)d1@`two
18
与列表一样,可以通过索引分配来修改字典的项目。
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
可以通过索引分配扩展字典。
q)d[`Height]:"182 Ft"
q)d
Name | `John
Age | 35
Sex | "M"
Weight | 60.3
Height | "182 Ft"
find(?)运算符用于通过将一系列元素映射到其domain元素来执行反向查找。
q)d2:`x`y`z!99 88 77
q)d2?77
`z
如果列表的元素不是唯一的,则查找会从域列表中返回映射到它的第一个项目。
要从字典中删除条目,请使用删除(_)函数。 (_)的左操作数是字典,右操作数是键值。
q)d2:`x`y`z!99 88 77
q)d2 _`z
x| 99
y| 88
如果第一个操作数是变量,则_左边必须有空格。
q)`x`y _ d2 / Deleting multiple entries
z| 77
列字典是创建表的基础。考虑以下示例-
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
翻转列字典的最终效果是简单地反转索引的顺序。从逻辑上讲,这等效于转置行和列。
通过应用一元翻转运算符可以获得字典的转置。看下面的例子-
q)scores
name | John Jenny Jonathan
id | 9 18 27
q)flip scores
name id
---------------
John 9
Jenny 18
Jonathan 27
如果您两次转译词典,您将获得原始词典,
q)scores ~ flip flip scores
1b