Home > front end >  set and sort function in loop
set and sort function in loop

Time:11-03

I need to be able to use function (get_years) to iterate a list of reviews such as:

{'rating': 5.0,
 'reviewer_name': 'Karen',
 'product_id': 'B00004RFRV',
 'review_title': 'Bialetti is the Best!',
 'review_time': '11 12, 2017',
 'images': ['https://images-na.ssl-images-amazon.com/images/I/81 XxFRGyBL._SY88.jpg'],
 'styles': {'Size:': ' 12-Cup', 'Color:': ' Silver'}}```

{'rating': 3.0,
 'reviewer_name': 'Peter DP',
 'product_id': 'B00005OTXM',
 'review_title': "Mr. Coffee DWX23 12-cup doesn't have the quality feel as my 13 year old nearly identical 12-cup Mr. Coffee",
 'review_time': '04 17, 2015',
 'images': ['https://images-na.ssl-images-amazon.com/images/I/71sFKwTW9sL._SY88.jpg'],
 'styles': {'Style Name:': ' COFFEE MAKER ONLY'}}

{'rating': 5.0,
 'reviewer_name': 'B. Laska',
 'product_id': 'B00004RFRV',
 'review_title': 'Love my Moka pots!',
 'review_time': '07 9, 2015',
 'images': ['https://images-na.ssl-images-amazon.com/images/I/719NCqw4GML._SY88.jpg'],
 'styles': {'Size:': ' 1-Cup', 'Color:': ' Silver'}}

to be able to return:

print(get_years(reviews)) # [2007, 2008, 2009, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]
print(type(get_years(reviews))) # <class 'list'>

I have:

def get_years(review): 
    review_years_set = set()
    for review in reviews:
        review_years_set.add(review['review_time'][-4:])
    review_years_list = list(review_years_set)
    review_years_list.sort()
    return review_years_list

which gives me what I want but it seems like the longer route. Is there a more Pythonic or efficient way to get a sorted list of set values?

CodePudding user response:

Given an iterable of string-formatted dates, e.g.:

dates = ['07 9, 2007', '04 1, 2008', '01 2, 2007', '08 2, 2014', '01 3, 2004', '01 4, 2004']

A concise way to produce a sorted list of unique years is as follows using set comprehension:

sorted_dates = sorted({int(date[-4:]) for date in dates})
print(sorted_dates)

Output:

[2004, 2007, 2008, 2014]

CodePudding user response:

try this.

def get_years(reviews):
    return sorted([review['review_time'][-4:] for review in reviews])

print(get_years(reviews))
  • Related