Colab

bank = [
    {"name" : "avi", "money" : 100, "city" : "rehovot"},
    {"name" : "ben", "money" : -20, "city" : "raanana"},
    {"name" : "carrie", "money" : 500, "city" : "tel-aviv"},
    {"name" : "david", "money" : 250, "city" : "nes-ziona"},
    {"name" : "efrat", "money" : 1000, "city" : "beer-sheeva"},
    {"name" : "fred", "money" : 50, "city" : "yafo"},
]

import pprint


pprint.pprint(bank)

[{'city': 'rehovot', 'money': 100, 'name': 'avi'},
 {'city': 'raanana', 'money': -20, 'name': 'ben'},
 {'city': 'tel-aviv', 'money': 500, 'name': 'carrie'},
 {'city': 'nes-ziona', 'money': 250, 'name': 'david'},
 {'city': 'beer-sheeva', 'money': 1000, 'name': 'efrat'},
 {'city': 'yafo', 'money': 50, 'name': 'fred'}]
def select_name(customer):
    return customer['name']

def select_city(customer):
    return customer['city']

def select_money(customer):
    return customer['money']

bank[0]

{'name': 'avi', 'money': 100, 'city': 'rehovot'}
print(bank[1])

{'name': 'ben', 'money': -20, 'city': 'raanana'}
select_name(bank[0])

'avi'
select_money(bank[0])

100
print(bank[1])
print(select_name(bank[1]))
print(select_money(bank[1]))


{'name': 'ben', 'money': -20, 'city': 'raanana'}
ben
-20
bank[0] < bank[1]


    ---------------------------------------------------------------------------

    TypeError                                 Traceback (most recent call last)

    <ipython-input-45-f526d7b9b849> in <module>
    ----> 1 bank[0] < bank[1]
    

    TypeError: '<' not supported between instances of 'dict' and 'dict'


select_money(bank[0]) < select_money(bank[1])

False
sorted(bank)


    ---------------------------------------------------------------------------

    TypeError                                 Traceback (most recent call last)

    <ipython-input-47-3335c59f163a> in <module>
    ----> 1 sorted(bank)
    

    TypeError: '<' not supported between instances of 'dict' and 'dict'


sorted(bank, key=select_money)

[{'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'}]
sorted(bank, key=select_name)

[{'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
sorted(bank, key=select_city)

[{'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
lambda_select_name = lambda customer : customer['name'] 

lambda_select_money = lambda customer : customer['money']

print(bank[1])
print(lambda_select_name(bank[1]))
print(lambda_select_money(bank[1]))

{'name': 'ben', 'money': -20, 'city': 'raanana'}
ben
-20
sorted(bank, key=lambda_select_money)

[{'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'}]
sorted(bank, key=lambda customer: customer['city'])

[{'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
def sort_the_bank(bank, mode="name"):
    def select_name2(customer):
        return customer['name']
    
    def select_money2(customer):
        return customer['money']
    
    def select_city2(customer):
        return customer['city']
    
    if(mode == "name"):
        return sorted(bank, key=select_name2)
    elif mode == "money":
        return sorted(bank, key=select_money2)
    elif mode == "city":
        return sorted(bank, key=select_city2)
    else:
        return "Error"
        

sort_the_bank(bank)

[{'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
sort_the_bank(bank, "money")

[{'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'}]
select_name2


    ---------------------------------------------------------------------------

    NameError                                 Traceback (most recent call last)

    <ipython-input-65-a75fa71e9e21> in <module>
    ----> 1 select_name2
    

    NameError: name 'select_name2' is not defined


def sort_the_bank_lambda(bank, mode="name"):
    select_name2 = lambda customer: customer['name']
    select_money2 = lambda customer: customer['money']
    select_city2 = lambda customer: customer['city']
    
    if(mode == "name"):
        return sorted(bank, key=select_name2)
    elif mode == "money":
        return sorted(bank, key=select_money2)
    elif mode == "city":
        return sorted(bank, key=select_city2)
    else:
        return "Error"

sort_the_bank_lambda(bank)

[{'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
def sort_the_bank_short(bank, mode="name"):
    def my_sorter(mode):
        return lambda customer: customer[mode]
 
    return sorted(bank, key=my_sorter(mode))

sort_the_bank_short(bank)

[{'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'}]
sort_the_bank_short(bank, "money")

[{'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'}]
def sort_the_bank_shorter(bank, mode="name"):
    return sorted(bank, key=lambda customer: customer[mode])

sort_the_bank_shorter(bank, "money")

[{'name': 'ben', 'money': -20, 'city': 'raanana'},
 {'name': 'fred', 'money': 50, 'city': 'yafo'},
 {'name': 'avi', 'money': 100, 'city': 'rehovot'},
 {'name': 'david', 'money': 250, 'city': 'nes-ziona'},
 {'name': 'carrie', 'money': 500, 'city': 'tel-aviv'},
 {'name': 'efrat', 'money': 1000, 'city': 'beer-sheeva'}]