【问题标题】:Restructuring the dictionary in Python在 Python 中重构字典
【发布时间】:2021-07-05 12:17:05
【问题描述】:

我收到了向量自回归 (VAR) 算法的输出作为数据框,并将其转换为字典,从而得到以下结构:

{
'Date': '2021-05-07',
 'BMI': 40.53002073252068,
 'BP': 123.00463807559225,
 'BloodSugar': 126.85415609085157,
 'ThyroidFunction': 3.0,
 'TF': 5.0
} 

我想以这种形式对其进行重组:

# {Vital : {date : value, risk_value : 1}}
{
'BMI' : {'2021-05-07' : 40.53002073252068, risk_value : 1}, 
'BP': {'2021-05-07' : 123.00463807559225, risk_value : 1}, 
'BloodSugar' :{'2021-05-07' : 126.85415609085157, risk_value : 1}, 
'ThyroidFunction' : {'2021-05-07' : 3.0, risk_value:1}, 
'TF' : {'2021-05-07' : 5.0, risk_value:1} 
}

这里的“risk_value : 1”暂时是静态的。

第一个字典中 VAR 的输出中唯一不变的就是第一个关键日期。 date 的值每天都会变化。

Vitals(BMI、BP、BloodSugar、ThyroidFunction、TF)可能会随着输入的新生命体征(体重、身高、BMI、BP、血糖)或完全不同的生命体征(胆固醇水平、心率、LDL)而变化。像这样:

{
 'Date': '2021-05-07',
 'weight': '170lbs',
 'height': '175cm',
 'BMI': 39.3252068004638,
 'BP': 104.530020707559225,
 'BloodSugar': 126.85415609085157,
 
} 

我想做一个动态重组字典的函数。所以我尝试创建一个函数,该函数将获取字典的所有键并尝试通过 while 循环运行它,然后创建一个包含生命体征和值的字典,但没有成功。

我已经坚持了很长时间,任何帮助将不胜感激。

【问题讨论】:

  • “我尝试创建一个函数......但没有成功”——那么你的函数在哪里以及它输出了什么?
  • @JustinEzequiel 我未能成功制作该功能。我有这样的想法,即获取密钥并运行一个 while 循环,然后生成一个字典,但我无法对其进行编码,所以我最终放弃了这个想法。

标签: python pandas dataframe dictionary


【解决方案1】:
your_dict = {
    'Date': '2021-05-07',
    'BMI': 40.53002073252068,
    'BP': 123.00463807559225,
    'BloodSugar': 126.85415609085157,
    'ThyroidFunction': 3.0,
    'TF': 5.0
}


def parse_dict(dict_in):
    dictionary = {}
    for x in dict_in:
        if x != 'Date':
            dictionary[x] = {dict_in['Date']: dict_in[x], 'risk_value': 1}
    return dictionary


dict_out = parse_dict(your_dict)

【讨论】:

    【解决方案2】:

    似乎@peter 打败了我,但因为我已经打扰了......

    def foo(some_dict, **kwargs):
        ret = {}
        date_key = some_dict.pop('Date')
        for k, v in some_dict.items():
            ret[k] = {date_key: v}
            ret[k].update(kwargs)
    
        return ret
    
    
    d = {
        'Date': '2021-05-07',
        'weight': '170lbs',
        'height': '175cm',
        'BMI': 39.3252068004638,
        'BP': 104.530020707559225,
        'BloodSugar': 126.85415609085157,
    }
    
    from pprint import pprint
    
    pprint(foo(d, risk_value=42, abc='x'))
    

    【讨论】:

      【解决方案3】:

      给你!

      def restructure (dct):
              date = dct['Date']   #store the date 
              dct.pop('Date')   #remove 'Date' key from the dict since it not needed anymore
              for key, value in dct.items():
                  dct[key] = {date:value, 'risk_value' : 1}   #update values for each key
              return dct
          
      print(restructure(d))
      

      【讨论】:

        猜你喜欢
        • 2017-09-04
        • 1970-01-01
        • 2020-05-02
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-02
        相关资源
        最近更新 更多