python - 如何将列表中的多个字典 append 到另一个包含 "inner"字典的特定部分的列表?

标签 python list pandas dictionary append

我的列表中有字典:

fit_statstest = [{'activities-heart': [{'dateTime': '2018-02-01',
'value': {'customHeartRateZones': [],
 'heartRateZones': [{'caloriesOut': 2119.9464,
   'max': 96,
   'min': 30,
   'minutes': 1232,
   'name': 'Out of Range'},
  {'caloriesOut': 770.2719,
   'max': 134,
   'min': 96,
   'minutes': 120,
   'name': 'Fat Burn'},
  {'caloriesOut': 0,
   'max': 163,
   'min': 134,
   'minutes': 0,
   'name': 'Cardio'},
  {'caloriesOut': 0,
   'max': 220,
   'min': 163,
   'minutes': 0,
   'name': 'Peak'}],
 'restingHeartRate': 64}}],
'activities-heart-intraday': {'dataset': [{'time': '00:00:00', 'value': 57},
{'time': '00:00:10', 'value': 56},
{'time': '00:00:20', 'value': 59},
{'time': '00:00:35', 'value': 59},
{'time': '02:54:10', 'value': 85},
{'time': '02:54:20', 'value': 71},
{'time': '02:54:30', 'value': 66},
...],'datasetInterval': 1,
'datasetType': 'second'}},
{'activities-heart': [{'dateTime': '2018-02-02',
'value': {'customHeartRateZones': [],
 'heartRateZones': [{'caloriesOut': 2200.61802,
   'max': 96,
   'min': 30,
   'minutes': 1273,
   'name': 'Out of Range'},
  {'caloriesOut': 891.9588,
   'max': 134,
   'min': 96,
   'minutes': 133,
   'name': 'Fat Burn'},
  {'caloriesOut': 35.8266,
   'max': 163,
   'min': 134,
   'minutes': 3,
   'name': 'Cardio'},
  {'caloriesOut': 0,
   'max': 220,
   'min': 163,
   'minutes': 0,
   'name': 'Peak'}],
 'restingHeartRate': 67}}],
'activities-heart-intraday': {'dataset': [{'time': '00:00:10', 'value': 80},
{'time': '00:00:15', 'value': 79},
{'time': '00:00:20', 'value': 74},
{'time': '00:00:25', 'value': 72},
{'time': '03:04:10', 'value': 61},
{'time': '03:04:25', 'value': 61},
{'time': '03:04:40', 'value': 61},
...],
'datasetInterval': 1,
'datasetType': 'second'}}]

我正在尝试将 'time': 'hh:mm:ss' 和 'value': Int append 到 DataFrame 中。

这就是我为一本字典所做的事情(效果非常好):

time_list = []
val_list = []
for i in fit_statsHR['activities-heart-intraday']['dataset']:
    val_list.append(i['value'])
    time_list.append(i['time'])

这就是我尝试对多级字典列表执行此操作的方法:

time_test = []
val_test = []
for i in fit_statstest:
    val_test.append(i['activities-heart-intraday']['dataset']['value'])
    time_test.append(i['activities-heart-intraday']['dataset']['time'])
heartdftest = pd.DataFrame({'Heart Rate':val_test,'Time':time_test})

我收到此错误:列表索引必须是整数或切片,而不是 str;我不太确定如何解决这个问题。

我尝试使用 .copy() 方法,但对此也不满意。

更新: @Phydeaux:为此干杯!我试过这个:

time_test = []
val_test = []
j = np.arange(0,len(fit_statstest))

for i in fit_statstest[j]['activities-heart-intraday']['dataset']:
    val_test.append(i['value'])
    time_test.append(i['time'])

我现在收到此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-184-f3e7484e1cfc> in <module>()
  3 j = np.arange(0,len(fit_statstest))
  4 
----> 5 for i in fit_statstest[j]['activities-heart-intraday']['dataset']:
  6     val_test.append(i['value'])
  7     time_test.append(i['time'])

TypeError: only integer scalar arrays can be converted to a scalar index

只有整数标量数组可以转换为标量索引。但不确定我是否走在正确的道路上!

最佳答案

i['activities-heart-intraday']['dataset'] 是一个包含多个字典的列表,每个字典都有一个 'value' 属性。您试图将此列表视为字典,这就是导致您收到异常的原因。

您对单个字典的代码有正确的想法。您需要循环遍历列表并对每个项目执行一些操作。

<小时/>

编辑:您不能直接使用np.arange来索引这样的列表,如异常(exception)所示。您期望它做什么?

试试这个:

time_test = []
val_test = []

# use descriptive names for your loop indices that give a hint about what they represent
for day in fit_statstest:
    for entry in day['activities-heart-intraday']['dataset']:
        time_test.append(entry['time'])
        val_test.append(entry['value'])

关于python - 如何将列表中的多个字典 append 到另一个包含 "inner"字典的特定部分的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994761/

相关文章:

python - 从 pandas DatetimeIndex 中删除天数

python - 如何使用 PANDAS 插入数据和角度

Python(pandas)将多个日期时间快速映射到其系列索引?

python sqlite 字符串插入

python - 将 numpy 矩阵转换为 pyspark rdd

Python 从另一个列表中排序一个列表

java - 用字符串填充 Double 列表

Python-根据列表中的位置/索引从字典中获取值

javascript - 为什么 JS 中的简单阶乘算法比 Python 或 R 中的快得多?

python - python setup.py sdist 输出的打印路径