Либо это ошибка, либо я собираюсь узнать что-то новое о том, как ведет себя Python.:)
У меня есть словарь, заполненный парами ключ / значение.Каждый ключ имеет уникальный префикс ias_XX_XX_
.Я пытаюсь получить список всех уникальных префиксов в словаре.
- Сначала я получаю список всех ключей, оканчивающихся на
'_x1'
. - Далее я снимаю
'_x1'
из всех них, используя rstrip('_x1'
).
Это прекрасно работает для всех из них, кроме последнего, ias_1_1_x1
.Вместо того, чтобы быть раздетым до ias_1_1
, оно становится ias_
.Запустите код, чтобы убедиться в этом:
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
Фактический вывод : (Python 2.6, 2.7 и 3.2 (необходимо изменить print на print (), чтобы 3.x работал))
['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???
Ожидаемый результат:
['ias_16_10_x1', 'ias_16_9_x1', 'ias_1_1_x1']
['ias_16_10', 'ias_16_9', 'ias_1_1']
Если я изменю имя ключа с ias_1_1
на что-то вроде ias_1_2
или ias_1_3
,сбоя не происходит.Почему это происходит?