简体   繁体   中英

Filter return empty array

I'm trying to extract some values from a list.

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

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; The final result is filtered list of the last loop iteration; Use dimensions_hour += ... instead to accumulate instead of overwriting.

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. So happens that the last element in your list is hour which resulted to an element for dimensions_hour .

Plus list is a reserved keyword. 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

[{'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'}]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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