简体   繁体   English

过滤器返回空数组

[英]Filter return empty array

I'm trying to extract some values from a list. 我正在尝试从列表中提取一些值。

https://hastebin.com/ugijekegip.json https://hastebin.com/ugijekegip.json

dimension_hour filters correctly the list, but dimension_days gets assigned an empty list [] even if they are using the same to filter 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']
        )

By reassigning, dimensions_hour = ... overwrites; 通过重新分配, dimensions_hour = ...被覆盖; The final result is filtered list of the last loop iteration; 最终结果是最后一次循环迭代的过滤列表; Use dimensions_hour += ... instead to accumulate instead of overwriting. 使用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']
        )

Because the "dimension*" lists in your loop gets overwritten for each iteration. 因为循环中的“ dimension *”列表对于每次迭代都会被覆盖。 So happens that the last element in your list is hour which resulted to an element for dimensions_hour . 因此,您列表中的最后一个元素是hour ,这导致了dimensions_hour元素。

Plus list is a reserved keyword. 加号list是保留关键字。 don't use it. 不要使用它。

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 Dimensions_day

[{'timeDimension': {'dayOfWeek': 'SATURDAY'}, 'metricOption': 'BREAKDOWN_DAY_OF_WEEK', 'value': '96'}]

dimensions_hour 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM