So if i correct the code some way, will it work that way with structs?
The "problem" has nothing to do with structs. You are sending 2 longs and 2 floats from a python script, and assuming that the Arduino will use the bytes you send to create exactly the same longs and floats as existed on the PC. How many bytes is a float, on the PC? Which endian-ness is the Python script using to send data? Which endian-ness does the Arduino use?
Comparing floats using == is generally not a good idea. 0.5 can be stored exactly in a float. 0.1 can not.
Converting the float you get back to a string, and expecting the printed representation to be exactly the keyed in value is foolish. Print the stored representation of the keyed in value exactly the same way, if you expect two strings to match.