Прохождения многомерной структуре и подаче газа() для всех строк


Я пытаюсь применить строку.прокладки() , чтобы все листья, которые струны в многомерном коллекции, но мой Python-это немного ржавый (мягко говоря). Следующий лучшее, что я придумал, но я подозреваю, что есть гораздо лучший способ сделать это.

def strip_spaces( item ):
    if hasattr( item, "__iter__" ):
        if isinstance( item, list ):
            return [strip_spaces( value ) for value in item]
        elif isinstance( item, dict ):
            return dict([(value,strip_spaces(value)) for value in item])
        elif isinstance( item, tuple ):
            return tuple([ strip_spaces( value ) for value in item ])
    elif isinstance( item, str ) or isinstance( item, unicode ):
        item = item.strip()
    return item


430
12
задан 18 февраля 2011 в 02:02 Источник Поделиться
Комментарии
2 ответа

Я не понимаю, почему вы проверяете для __ИТЭР__ атрибут, как вам кажется, не использовать его. Однако я бы порекомендовал пару изменений:


  • Использование абстрактных базовых классов в коллекциях модуль для тестирования дак типов, таких как "повторяемое"

  • Использовать типов.StringTypes для выявления строковых типов

.

import collections
import types

def strip_spaces( item ):
if isinstance( item, types.StringTypes ):
return item.strip()

if isinstance( item, collections.Iterable ):
if isinstance( item, list ):
return [ strip_spaces( value ) for value in item ]

elif isinstance( item, dict ):
return dict([ ((strip_spaces(key), strip_spaces(value)) \
for key, value in item.iteritems() ])

elif isinstance( item, tuple ):
return tuple( [ strip_spaces( value ) for value in item ] )

return item

6
ответ дан 18 февраля 2011 в 09:02 Источник Поделиться

elif isinstance( item, dict ):
return dict([(value,strip_spaces(value)) for value in item])

Это преобразование { ' А ': 'Б' } В {' А ': 'А' }, который я подозреваю, не то, что вы хотите. Как насчет:

    return dict([(key, strip_spaces(value)) for key, value in item.items()])

5
ответ дан 18 февраля 2011 в 07:02 Источник Поделиться