You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在推导式中创建新字典并删除原字典键?优化字典拆分代码

问题:能否用单个字典推导式将字典拆分到类属性?

我需要将一个字典拆分到类属性中,以便后续对属性进行格式化。想请教:是否可以通过单个字典推导式完成该拆分操作?现有代码可实现需求,但希望找到更优雅的实现方式。以下是我迭代出来的多版实现代码:

初始实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:55:16