You probably have "set print address" off. I wouldn't do this. It's arguably a bug that the str operator is respecting this setting.
There isn't a good way to reproduce "p/x" other than just invoking it directly. See gdb.execute.
You can get the value of any field using []. Like
val = something['fieldname']
It's usually better, IMO, to use the API rather than parse_and_eval. That is, you can cast, look up fields, etc, directly from Python.