When create a StructType from a Python dictionary you utilize the StructType.fromJson function. This function then internally calls StructField.fromJson for each field in the list. This function requires that you must have all keys populated:
name and type most definitely have to be required. However, if you take a look at the constructor for StructField there are default arguments for nullable and metadata. This is turn makes me think that these fields should be optional when creating a StructType from a Python dict.