[英]Filter return empty array
我正在嘗試從列表中提取一些值。
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']
)
通過重新分配, 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']
)
因為循環中的“ dimension *”列表對於每次迭代都會被覆蓋。 因此,您列表中的最后一個元素是hour
,這導致了dimensions_hour
元素。
加號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'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.