У меня возникли трудности с удалением записи из словаря KDB. Ключи и значения являются строками.
Работает
q)l3:`a`b`c!1 2 3
q)`a _l3
b| 2
c| 3
Не работает
q)l2:("k1";"k2";"ABC")!("v1";"v2";"BLA BLA")
q)"k1" _l2
'type
Спасибо, Евгений
У меня возникли трудности с удалением записи из словаря KDB. Ключи и значения являются строками.
Работает
q)l3:`a`b`c!1 2 3
q)`a _l3
b| 2
c| 3
Не работает
q)l2:("k1";"k2";"ABC")!("v1";"v2";"BLA BLA")
q)"k1" _l2
'type
Спасибо, Евгений
Поскольку тип «списка ключей» в вашем словаре равен 0h (смешанный список или список списка)
q) type ("k1";"k2";"ABC")
q) 0h
и тип вашего единственного ключа 10h (строка)
q) type "k1"
q) 10h
Вот почему при сопоставлении kdb выдает ошибку типа.
Ссылка: http://code.kx.com/q4m3/5_Dictionaries/
В нем говорится: «Левый операнд удаления — это словарь (цель), а правый операнд — значение ключа, тип которого соответствует типу цели».
Вы можете использовать следующее, чтобы удалить запись:
q) (k@where not (k:key l2) like "k1")#l2
Key Value
k2 v2
ABC BLA BLA
Я думаю, вы должны использовать enlist
, чтобы удалить ключ строки из словаря:
q)enlist["k1"]_("k1";"k2";"ABC")!("v1";"v2";"BLA BLA")
"k2" | "v2"
"ABC"| "BLA BLA"
_
(drop) принимает левый ввод как список элементов словарного ключа (за исключением символьного ключа). Попробуйте представить, что в вашем случае «k1» — это «атом», и для создания одноэлементного списка вы можете просто enlist
«k1».
Ссылка: http://code.kx.com/q/ref/lists/#_-cut