O esto es un error, o que voy a aprender algo nuevo acerca de cómo se comporta Python. :)Bug en la función(), str.rstrip de Python o de mi propia estupidez?
tengo un diccionario lleno de pares clave/valor. Cada tecla tiene un prefijo único, ias_XX_XX_
. Estoy intentando obtener una lista de cada prefijo único en el diccionario.
- En primer lugar me da una lista de todas las claves que terminan en
'_x1'
. - A continuación, tira
'_x1'
de todos ellos utilizandorstrip('_x1'
).
Esto funciona bien para todos ellos, a excepción de la última, ias_1_1_x1
. En lugar de ser despojado de ias_1_1
, se convierte en ias_
. Ejecutar el código para ver por sí mismo:
d = {
'ias_16_10_x2': 575,
'ias_16_10_x1': 0,
'ias_16_10_y1': 0,
'ias_16_10_y2': 359,
'ias_16_9_x2': 575,
'ias_16_9_x1': 0,
'ias_16_9_y1': 18,
'ias_16_9_y2': 341,
'ias_1_1_y1': 0,
'ias_1_1_y2': 359,
'ias_1_1_x2': 467,
'ias_1_1_x1': 108,
}
x1_key_matches = [key for key in d if '_x1' in key]
print x1_key_matches
unique_ids = []
for x1_field in x1_key_matches:
unique_ids.append(x1_field.rstrip('_x1'))
print unique_ids
Salida Real: (Python 2.6, 2.7 y 3.2 (debe cambiar de impresión para imprimir() para 3.x para trabajar))
['ias_16_10_x1', 'ias_16_9_x1', 'ias_1_1_x1']
['ias_16_10', 'ias_16_9', 'ias'] # <<<--- Why isn't this last one ias_1_1???
Resultados esperados:
['ias_16_10_x1', 'ias_16_9_x1', 'ias_1_1_x1']
['ias_16_10', 'ias_16_9', 'ias_1_1']
Si cambio el nombre de la clave de ias_1_1
a algo así como ias_1_2
, o ias_1_3
, el fallo no ocurre. ¿Por qué está pasando esto?
En retrospectiva, podría haber sido más correcta y menos confuso si el argumento de 'rstrip' se establece un lugar de una lista. Pero los conjuntos se agregaron más tarde a Python. –
Siempre puede cortar los últimos tres caracteres: 'uids = [tecla [: - 3] para la tecla d si key.endswith (" _ x1 ")]'. Tenga en cuenta que 'endswith' no es lo mismo que la prueba que ha ejecutado. – katrielalex