我试图从列表中提取一些值。
https://hastebin.com/ugijekegip.json
dimension_hour
正确过滤了该列表,但dimension_days
被分配了一个空列表[]
,即使他们使用相同的过滤
dimensions_day = []
dimensions_hour = []
for element in list:
if element['dimensionalValues'] is not None:
dimensions_day = filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_DAY_OF_WEEK',
element['dimensionalValues']
)
dimensions_hour = filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_HOUR_OF_DAY',
element['dimensionalValues']
)
答案 0 :(得分:0)
通过重新分配,dimensions_hour = ...
覆盖;最终结果是最后一次循环迭代的过滤列表;使用dimensions_hour += ...
代替累积而不是覆盖。
dimensions_day = []
dimensions_hour = []
for element in list:
if element['dimensionalValues'] is not None:
dimensions_day += filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_DAY_OF_WEEK',
element['dimensionalValues']
)
dimensions_hour += filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_HOUR_OF_DAY',
element['dimensionalValues']
)
答案 1 :(得分:0)
因为循环中的“dimension *”列表会因每次迭代而被覆盖。
碰巧,列表中的最后一个元素是hour
,这导致了dimensions_hour
的元素。
Plus list
是保留关键字。不要使用它。
for element in elements:
if 'dimensionalValues' in element:
dday = filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_DAY_OF_WEEK',
element['dimensionalValues']
)
dimensions_day.extend(dday) # add day to list
dhour = filter(lambda dimVal:
dimVal['metricOption'] == 'BREAKDOWN_HOUR_OF_DAY',
element['dimensionalValues']
)
dimensions_hour.extend(dhour) # add hour to list
print(list(dimensions_day))
print(list(dimensions_hour))
dimensions_day
[{'timeDimension': {'dayOfWeek': 'SATURDAY'}, 'metricOption': 'BREAKDOWN_DAY_OF_WEEK', 'value': '96'}]
dimensions_hour
[{'timeDimension': {'timeOfDay': {'hours': 11}}, 'metricOption': 'BREAKDOWN_HOUR_OF_DAY', 'value': '10'}, {'timeDimension': {'timeOfDay': {'hours': 12}}, 'metricOption': 'BREAKDOWN_HOUR_OF_DAY', 'value': '16'}]