如何在推导式中创建新字典并删除原字典键?优化字典拆分代码
问题:能否用单个字典推导式将字典拆分到类属性?
我需要将一个字典拆分到类属性中,以便后续对属性进行格式化。想请教:是否可以通过单个字典推导式完成该拆分操作?现有代码可实现需求,但希望找到更优雅的实现方式。以下是我迭代出来的多版实现代码:
初始实现代码
class FormatSubmissions(): submissions = None sic = None info = None rest = None info_keys = [ 'tickers', 'exchanges' 'ein', 'formerNames', 'state', 'addresses', 'phone', 'entityType', 'fiscal'] def set_submissions(self, submissions): if not submissions: return False self.submissions = submissions self.sic = {a: b for a, b in submissions.items() if a.startswith('sic')} [ submissions.pop(i) for i in self.sic.keys()] self.info ={c: d for c, d in submissions.items() for f in self.info_keys if c.startswith(f)} [submissions.pop(i) for i in self.info.keys()] self.filings = submissions.pop('filings') self.rest = submissions
更新版(基于@andreas-sabelfeld的建议)
class FormatSubmissions(): __submissions__ = {} info_keys = [ 'tickers', 'exchanges' 'ein', 'formerNames', 'state', 'addresses', 'phone', 'entityType', 'fiscal'] info = None sic = None filings = None rest = None def __init__(self, submissions): if isinstance(submissions, 'dict'): self.__submissions__ = submissions self.rest = submissions self._set_filings() self._set_sic() self._set_info() def _set_info(self): self.info = {c: d for c, d in self.rest.items() for f in self.info_keys if c.startswith(f)} [self.rest.pop(i) for i in self.info.keys()] def _set_sic(self): self.sic = {a: b for a, b in self.rest.items() if a.startswith('sic')} [self.rest.pop(i) for i in self.sic.keys()] def _set_filings(self): self.filings = self.rest.pop('filings') def get_filings(self): return self.filings def get_info(self): return self.info def get_rest(self): return self.rest
趣味更新版
def set_submission(submission): if type(submissions) is not 'dict': return info_keys = [ 'tickers', 'exchanges' 'ein', 'formerNames', 'state', 'addresses', 'phone', 'entityType', 'fiscal'] info = None sic = None filings = None rest = None while submission: if 'filings' in submission.keys(): filings = submission.pop('filings') info = {c: d for c, d in submission.items() for f in info_keys if c.startswith(f)} [submission.pop(i) for i in info.keys()] sic = {a: b for a, b in submission.items() if a.startswith('sic')} [submission.pop(i) for i in sic.keys()] rest = submission submission = False return filings,sic,info, rest
我挺喜欢这个实现方式的
内容的提问来源于stack exchange,提问作者deadcow
相关产品推荐
相关产品推荐

