Farei un wrapper in modo da poter essere non invasivi. Come minimo, per esempio ...:
class CaseInsensitively(object):
def __init__(self, s):
self.__s = s.lower()
def __hash__(self):
return hash(self.__s)
def __eq__(self, other):
# ensure proper comparison between instances of this class
try:
other = other.__s
except (TypeError, AttributeError):
try:
other = other.lower()
except:
pass
return self.__s == other
Ora, if CaseInsensitively('MICHAEL89') in whatever:
dovrebbe comportarsi come richiesto (se il lato destro è una lista, dict, o impostare). (Potrebbe richiedere uno sforzo maggiore per ottenere risultati simili per l'inclusione delle stringhe, evitare avvisi in alcuni casi che riguardano lo unicode
, ecc.).
fonte
2010-09-02 14:45:08
'se 'CaseFudge'.lower() in [x.lower() per x nella lista]' ' – fredley
[...]' crea l'intera lista. '(name.upper() per il nome in USERNAMES)' creerebbe solo un generatore e una stringa necessaria alla volta - enormi risparmi di memoria se si sta facendo molto questa operazione. (ancora più risparmi, se si crea semplicemente un elenco di nomi utente minuscoli che si riutilizzano per il controllo ogni volta) – viraptor
Preferisci abbassare tutti i tasti quando si costruisce il dict, per motivi di prestazioni. – Ryan