es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

rsplit() | devuelve una cadena vacía en lugar de `IndexError: índice de lista fuera de rango`

En lugar de rsplit(), ¿existe una función alternativa que devuelva una cadena vacía: "" y no se bloquee?

Quiero devolver la “segunda mitad” de la cadena de una clave key y colocarla al final de la cadena de su respectivo valor value. Sin embargo, no todas las claves tienen el ~ en su nombre.

Si no tiene una “etiqueta”: ~tag, entonces quiero devolver una cadena vacía.

Nota: esto podría ser más fácil sin ser una comprensión de diccionario:

“`import random

DLM = ‘~’

programmatic_dict = {key: ‘{} {} {}’.format(val, DLM, key.rsplit(DLM, 1)[1]) if random.randint(0,9) == 9 else val for key, val in programmatic_dict.items()} # 10% tag“`

Código mínimo: (que resulta en el mismo error que el código anterior):

“`thisdict = {
“brand~tag”: “Ford”,
“model~tag”: “Mustang”,
“year”: 1964
}

DLM = ‘~’

for k in thisdict.keys():
print(k.rsplit(DLM, 1)[1])“`

Resultado:

tag
tag

IndexError Traceback (última llamada más reciente):

<ipython-input-29-036aa5073b32> en

para k en thisdict.keys(): print(k.rsplit(DLM, 1)[1])

IndexError: lista de índice fuera de rango

Por favor, avíseme si hay algo más que pueda agregar al publicación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, en lugar de rsplit(), puede usar .split() con índice negativo para devolver el último elemento de la cadena y luego usar un bloque try-except para manejar el caso en el que la cadena no contiene el delimitador. Aquí hay un ejemplo:

    clave = "marca"
    DLM = "~"
    try:
        segunda_mitad = clave.split(DLM)[-1]
    except IndexError:
        segunda_mitad = ""
    

    Este código establecerá segunda_mitad en una cadena vacía si DLM no se encuentra en clave.

Comments are closed.