i've have problem have dict of passengers this:
passengers = { 1: {'name': 'foo', 'lastname': 'bar', 'exclusive': true}, 2: {'name': 'john', 'lastname': 'doe'}, 3: {'name': 'rocky', 'lastname': 'balboa', 'exclusive': true}, 4: {'name': 'mohammed', 'lastname': 'smith'} }
and need print results items exclusive first rest:
this desired output
list of passengers: =================== 1.- foo bar 2.- rocky balboa 3.- john doe 4.- mohammed smith
i tried collections.deque
, , haven't found works me, until came function:
def prioritize_passengers(dictionary): priority_list = [] normal_list = [] sorted_list = [] key, item in dictionary.iteritems(): if 'exclusive' in item: priority_list.append(key) else: normal_list.append(key) sorted_list = priority_list + normal_list return sorted_list
and use on data this:
# assuming passenger same var above sorted_list = prioritize_passengers(passengers) print "list of passengers:\n===================" elem in sorted_list: passenger = passengers[elem] print "{} {}".format(passenger['name'], passenger['lastname']
is way or there more clear/efficient way achieve it? again, second paragraph desired output.
yes, there other ways sort list. here one:
passengers = { 1: {'name': 'foo', 'lastname': 'bar', 'exclusive': true}, 2: {'name': 'john', 'lastname': 'doe'}, 3: {'name': 'rocky', 'lastname': 'balboa', 'exclusive': true}, 4: {'name': 'mohammed', 'lastname': 'smith'} } list_of_passengers = sorted( passengers.items(), key=lambda x: (('exclusive' not in x[1]), x[0])) i, (_, passenger) in enumerate(list_of_passengers, 1): print '{}. - {} {}'.format(i, passenger['name'], passenger['lastname'])
since don't care order other exclusive
-ness, might work you:
passengers = { 1: {'name': 'foo', 'lastname': 'bar', 'exclusive': true}, 2: {'name': 'john', 'lastname': 'doe'}, 3: {'name': 'rocky', 'lastname': 'balboa', 'exclusive': true}, 4: {'name': 'mohammed', 'lastname': 'smith'} } list_of_passengers = sorted( passengers.values(), key=lambda x: 'exclusive' not in x) i, passenger in enumerate(list_of_passengers, 1): print '{}. - {} {}'.format(i, passenger['name'], passenger['lastname'])
finally, if want create 2 separate lists, can use filter()
builtin funciton:
upper_crust = filter(lambda x: 'exclusive' in x, passengers.values()) riff_raff = filter(lambda x: 'exclusive' not in x, passengers.values())
Comments
Post a Comment