Please forgive me, but this suggestion relies on a lot of assumptions about worldgen. As always, please correct me if I’m mistaken about how the game works - I am not a coder.
My assumption about C:DDA is that it follows a pretty standard heirarchical worldgen model: Terrain>Roads>Features>Buildings(in towns)>Cars>Monsters. I also assume that static spawn will be the spawn method that’s updated in the future.
So, my suggestion is to tie the zombie inventory code back into previous levels of worldgen. When a zombie is spawned at the end of things, have the spawn code check the nearby area for buildings or vehicles and randomly alter some of the spawned zombies inventories to match. Zombies near a fast-food joint have polo shirts and pants, a zombie spawned near a motocycle is wearing the helmet, and zombies near a bar might carry booze.
As for how, my personal guess would actually be to create an separate “map” array during worldgen that the various other algorithms write to. This array would be lower-resolution than the actual playfield. (I think I have heard mention that C:DDA is organized something like minecraft, with the playfield being separated into 16x16 sub-maps? Not a coder.) In each cell you could store things like IS_COFFEHOUSE and HAS_CYCLE, or CHOPPER_WRECK. When it comes time to spawn a zombie, the worldgen code checks the array 1/6th of the time and garbs the zombie in the pre-made inventory set depending on a randomly-selected flag from that “chunk” of the array which matches the spawning area. Finally, run each zombie for 12-16 turns in order to get a little drift, but not too much. (Alternately, the list of random array-flags to be chosen from could include the spawning chunk and all of the contiguous chunks in the array.)
I suggest that method because it avoids complicated analytical code being run on the map. If it turns out that this sort of analysis of the things near a given spot on the map is actually easy, then ignore everything I said.