There is no standard command for doing this because the number of possible commands for all the different things that might be done gets too large; only common cases are provided for you (with the exact choice depending in part on what is technically unambiguous given that Tcl's dictionaries allow arbitrary values as keys by design). Instead, dict update and dict with are provided as tools to allow people to make their own solutions.
In particular, by making the assumption that we are appending exactly one list item and with dict update, upvar and some recursion, we can make this:
proc dict_lappend_item {dictVar args} {
upvar 1 $dictVar d
if {[llength $args] == 1} {
lappend d [lindex $args 0]
} else {
set args [lassign $args key]
dict update d $key inner {
dict_lappend_item inner {*}$args
}
}
return $d
}
Here's using it:
% set test [dict create]
% dict set test 1 "flps" "o1"
1 {flps o1}
% dict_lappend_item test 1 flps o2
1 {flps {o1 o2}}
% dict_lappend_item test 1 flps o3
1 {flps {o1 o2 o3}}
That looks like it is doing the thing you need. (Note that dict lappend doesn't make that assumption; it instead handles the append-multiple-items case, which has some true performance nasties if not treated specially in C code.)
You can plug the above procedure into dict.
set map [namespace ensemble configure dict -map]
dict set map additem ::dict_lappend_item
namespace ensemble configure dict -map $map
and then you can do:
% dict additem test 1 flps o4
1 {flps {o1 o2 o3 o4}}
Careful if you do this. Overriding standard subcommand implementations is possible, but a recipe for code that doesn't work if you're not uber-cautious about following the existing API.