python - Is it reasonable to use type(a) as a dictionary key? -
i trying store files in dictionary depending on type. this, using pygments api follow:
# initialization of self.files dictionary self.files = dict() # scanning , categorizing files file in files: lexer = guess_lexer__for_filename(file, none) if type(lexer) in self.files: self.files[type(lexer)].append(file) else: self.files[type(lexer)] = [file] but, now, when passing code through pylint3, warning telling me should use isinstance() in place of type() (unidiomatic-typecheck).
the best way workaround warning found far follow:
self.files = dict() file in files: lexer = guess_lexer__for_filename(file, none) if lexer.__class__ in self.files: self.files[lexer.__class__].append(file) else: self.files[lexer.__class__] = [file] but, solve problem ? and, moreover, started doubt using type key in dictionary robust enough.
so, there more suitable , robust ways do? solution arguments welcome.
using type() output, object, key fine. ignore warning in case.
i'd use dict.setdefault() or collections.defaultdict() extend list value:
self.files = {} file in files: lexer = guess_lexer__for_filename(file, none) self.files.setdefault(type(lexer), []).append(file) or
from collections import defaultdict self.files = defaultdict(list) file in files: lexer = guess_lexer__for_filename(file, none) self.files[type(lexer)].append(file) however, on python 3, investigate if functools.singledispatch() used handle use-case instead. calls registered function given object type, taken first argument, , supports subclasses.
Comments
Post a Comment