- KDB+ 教程
- KDB+ - 首页
- Q 编程语言
- Q 编程语言
- Q 语言 - 类型转换
- Q 语言 - 时间数据
- Q 语言 - 列表
- Q 语言 - 索引
- Q 语言 - 字典
- Q 语言 - 表格
- Q 语言 - 动词 & 副词
- Q 语言 - 连接
- Q 语言 - 函数
- Q 语言 - 内置函数
- Q 语言 - 查询
- Q - 进程间通信
- Q - 消息处理器 (.Z 库)
- KDB+ 有用资源
- KDB+ - 快速指南
- KDB+ - 有用资源
- KDB+ - 讨论
Q 语言 - 字典
字典是列表的扩展,为创建表格提供了基础。在数学术语中,字典创建了
“域 → 值域”
或者一般(简短)创建
“键 → 值”
元素之间的关系。
字典是键值对的有序集合,大致相当于哈希表。字典是由域列表和值域列表通过位置对应关系之间显式 I/O 关联定义的映射。字典的创建使用“xkey”原语(!)。
ListOfDomain ! ListOfRange
最基本的字典将一个简单列表映射到一个简单列表。
输入 (I) | 输出 (O) |
---|---|
`姓名 | `约翰 |
`年龄 | 36 |
`性别 | “男” |
体重 | 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"
使用查找 (?) 进行反向查找
查找 (?) 运算符用于通过将一系列元素映射到其域元素来执行反向查找。
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
广告