You could use a rule based renderer.
I have partially based this answer on another answer here by @Joseph). I have tried this solution on a test layer and it works well:
Note: The second item in each nested list of rules is the filter expression for each rule. From your question I assume that your field which contains these values is called "VALVULA". If this is not the case you will have to change the expressions accordingly. Otherwise this should work fine on your layer.
# Get layer object
layer6 = QgsProject().instance().mapLayersByName('Layer_Name')[0] #Change to your layer name
symbol = QgsSymbol.defaultSymbol(layer6.geometryType())
renderer = QgsRuleBasedRenderer(symbol)
rules = [['0', """"VALVULA" LIKE '0'""", QgsSimpleMarkerSymbolLayerBase.Circle, 'Yellow'],
['Aire', """"VALVULA" LIKE 'Aire'""", QgsSimpleMarkerSymbolLayerBase.Triangle, 'Blue'],
['Mariposa', """"VALVULA" LIKE 'Mariposa'""", QgsSimpleMarkerSymbolLayerBase.Star, 'Red'],
['Alivio', """"VALVULA" LIKE 'Alivio'""", QgsSimpleMarkerSymbolLayerBase.Square, 'Green']]
def rule_based_symbology(layer, renderer, label, expression, symbol, shape, color):
root_rule = renderer.rootRule()
rule = root_rule.children()[0].clone()
rule.setLabel(label)
rule.setFilterExpression(expression)
rule.symbol().symbolLayer(0).setShape(shape)
rule.symbol().setColor(QColor(color))
root_rule.appendChild(rule)
layer.setRenderer(renderer)
layer.triggerRepaint()
for rule in rules:
rule_based_symbology(layer6, renderer, rule[0], rule[1], symbol, rule[2], rule[3])
renderer.rootRule().removeChildAt(0)
iface.layerTreeView().refreshLayerSymbology(layer6.id())
Result:

Edit: If you wish to collapse the legend nodes for the layer symbology categories:
layer_node = QgsProject().instance().layerTreeRoot().findLayer(layer6.id())
layer_node.setExpanded(False) #or True to expand again