Python 如何将一个列表中的多个词典附加到另一个列表中,该列表包含;“内部”;字典?

Python 如何将一个列表中的多个词典附加到另一个列表中,该列表包含;“内部”;字典?,python,list,pandas,dictionary,append,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'}, {'calor

我在一个列表中列出了字典:

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附加到数据帧

这是我为一本字典所做的(它的工作就像一个符咒):

下面是我在多级字典列表中尝试的方法:

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()方法,但也不喜欢

更新:
@菲多:为这个干杯!我试过这个:

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
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
3 j=np.arange(0,len(拟合测试))
4.
---->5对于i in fit_statstest[j]['activities-heart-intraday']['dataset']:
6 val_测试。附加(i['value'])
7时间测试。附加(i['time'])
TypeError:只能将整数标量数组转换为标量索引

只有整数标量数组才能转换为标量索引。不知道我是否走对了路

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

您对单个词典的代码有正确的想法。您需要循环浏览列表,并对每个项目进行处理


Edit:您不能直接使用
np.arange
为这样的列表编制索引,例外情况是这样的。你期望它做什么

试试这个:

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'])

以下是一个通过单一列表理解的解决方案:

import pandas as pd

time_values = [(d['time'], d['value']) for day in fit_statstest \
               for d in day['activities-heart-intraday']['dataset']]

df = pd.DataFrame(time_values, columns=['time', 'value'])
结果

        time  value
0   00:00:00     57
1   00:00:10     56
2   00:00:20     59
3   00:00:35     59
4   02:54:10     85
5   02:54:20     71
6   02:54:30     66
7   00:00:10     80
8   00:00:15     79
9   00:00:20     74
10  00:00:25     72
11  03:04:10     61
12  03:04:25     61
13  03:04:40     61

为此干杯!我尝试了以下方法:time_test=[]val_test=[]j=np.arange(0,29)for I in fit_statstest[j]['activities-heart-intraday']['dataset']:val_test.append(I['value'])time_test.append(I['time'])heartdftest=pd.DataFrame({'heartrate':val_test,'time':time_test})我现在得到了这个错误:只有整数标量数组可以转换为标量索引。不知道我是否走对了路@你能把它编辑成问题吗?在评论中读起来有点难。另外,一般来说,如果您包含异常的全文(特别是发生异常的那一行),这会很有帮助。很抱歉,这里太乱了!我现在已经在问题中添加了代码和错误。非常感谢!
        time  value
0   00:00:00     57
1   00:00:10     56
2   00:00:20     59
3   00:00:35     59
4   02:54:10     85
5   02:54:20     71
6   02:54:30     66
7   00:00:10     80
8   00:00:15     79
9   00:00:20     74
10  00:00:25     72
11  03:04:10     61
12  03:04:25     61
13  03:04:40     61