Now this works just fine:
(setq al \'((a . \"1\") (b . \"2\")))
(assq-delete-all \'a al)
But I\'m using strings as keys in my app:
If you know there can only be a single matching entry in your list, you can also use the following form:
(setq al (delq (assoc al) al)
Notice that the setq (which was missing from your sample code) is very important for `delete' operations on lists, otherwise the operation fails when the deleted element happens to be the first on the list.