Change Navigation into walk Navigation with scripting
Putting 3D viewport in walk mode from py console.
Think you were 99% there.
IMO always a good idea to try things out in the python console
&gt;&gt;&gt; C.area.type
'CONSOLE'

Override the context by finding a view3d area in the screen. Make sure an area aside from console is a view3d.
&gt;&gt;&gt; for a in C.screen.areas:
...     if a.type == 'VIEW_3D':
...         break
...         
&gt;&gt;&gt; a.type
'VIEW_3D'

Make a dictionary and fill with usual suspects area, space_data, and region
It is AFAIK always the case that the 'WINDOW' region is the last in the area regions. If not of this opinion can iterate them as shown in question.
&gt;&gt;&gt; c = {}
&gt;&gt;&gt; c[&quot;area&quot;] = a
&gt;&gt;&gt; c[&quot;space_data&quot;] = a.spaces.active
&gt;&gt;&gt; c[&quot;region&quot;] = a.regions[-1]

Ok now give the override a go... oh and remember all letters in an operator are expected to be  lower case eg 3d not 3D.... (However it does appear to accept view3D, but autocompletes on view3d)
Attempt 1... passed through.. equivalent of doing NADA.. but no errors.
&gt;&gt;&gt; bpy.ops.view3d.walk(c)
{'PASS_THROUGH'}

Ok will try good old 'INVOKE_DEFAULT' execution context, this is as if we were there in the 3D view and pressed a button or chose it in a menu...
Attempt 2... BINGO.. 3D view is in walk mode.
&gt;&gt;&gt; bpy.ops.view3d.walk(c, 'INVOKE_DEFAULT')
{'RUNNING_MODAL'}

Ok all that done and shown, if you are going to write an operator that is invoked from within the 3d viewport, all the override stuff is not required. (Similarly if you change the area to a 3d viewport as shown by @Chris, but in reality we rarely want to do that way... hard to type into console if it becomes the 3d viewport (for example))  The default execution context of a button or menu pressed is 'INVOKE_DEFAULT'.