0

I have my AWS Python lambda function return the string with below data:

mydata = ( 
#user                            #Key                           #age

eks-user            AKIAII4CCN6AA           288  days
eks-user            AKIAJFUU2ASII           100  days
Oracle_RMAN         AKIAJ4DMBBCEP           847  days
Oracle_RMAN         AKIAIAWETFUK            134  days
nb-dev-api          AKIAI7OTKONT            199  days
nb-dev-api          AKIAICIDXLDU            100  days
text@abc.com                    AKIAJ4DMBBCEP           120      days )

which I want to sort by age.

Please let me know the recommendations which works here?

Thank you in advance!

I have tried to use the sort and sorted method which doesn't help.

mydata.sort(key=AgeSort)
print(f'list of Compliance Users: {username}')

#Sort the user by age
def AgeSort(d):
    return d[str(age)]

I expect the output:

Oracle_RMAN         AKIAJ4DMBBCEP           847  days
eks-user            AKIAII4CCN6AA           288  days
nb-dev-api          AKIAI7OTKONT            199  days
Oracle_RMAN         AKIAIAWETFUK            134  days
text@abc.com        AKIAJ4DMBBCEP           120  days
eks-user            AKIAJFUU2ASII           100  days
nb-dev-api          AKIAICIDXLDU            100  days
John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
SKR
  • 1

2 Answers2

0
from operator import itemgetter

aws_string = """eks-user            AKIAII4CCN6AA           288  days
eks-user            AKIAJFUU2ASII           100  days
Oracle_RMAN         AKIAJ4DMBBCEP           847  days
Oracle_RMAN         AKIAIAWETFUK            134  days
nb-dev-api          AKIAI7OTKONT            199  days
nb-dev-api          AKIAICIDXLDU            100  days
text@abc.com                    AKIAJ4DMBBCEP           120      days"""

def sort_string(string):
    string = string.split("\n")
    array_of_data = []
    for line in string:
        array_of_data.append(line.split())
    #array_of_data = sorted(array_of_data,key=lambda l:l[2], reverse=True)
    array_of_data = sorted(array_of_data, key=itemgetter(2), reverse=True)
    return array_of_data

ls = sort_string(aws_string)
for l in ls:
    print(l)

OUTPUT:

['Oracle_RMAN', 'AKIAJ4DMBBCEP', '847', 'days']
['eks-user', 'AKIAII4CCN6AA', '288', 'days']
['nb-dev-api', 'AKIAI7OTKONT', '199', 'days']
['Oracle_RMAN', 'AKIAIAWETFUK', '134', 'days']
['text@abc.com', 'AKIAJ4DMBBCEP', '120', 'days']
['eks-user', 'AKIAJFUU2ASII', '100', 'days']
['nb-dev-api', 'AKIAICIDXLDU', '100', 'days']

Return a string

from operator import itemgetter

aws_string = """eks-user            AKIAII4CCN6AA           288  days
eks-user            AKIAJFUU2ASII           100  days
Oracle_RMAN         AKIAJ4DMBBCEP           847  days
Oracle_RMAN         AKIAIAWETFUK            134  days
nb-dev-api          AKIAI7OTKONT            199  days
nb-dev-api          AKIAICIDXLDU            100  days
text@abc.com                    AKIAJ4DMBBCEP           120      days"""

def sort_string(string):
    string = string.split("\n")
    array_of_data = []
    for line in string:
        array_of_data.append(line.split())
    #array_of_data = sorted(array_of_data,key=lambda l:l[2], reverse=True)
    array_of_data = sorted(array_of_data, key=itemgetter(2), reverse=True)

    for l in array_of_data:
        array_of_data[array_of_data.index(l)] = " ".join(l)

    array_of_data = "\n".join(array_of_data)
    return array_of_data

ls = sort_string(aws_string)
print(ls)

OUTPUT:

Oracle_RMAN AKIAJ4DMBBCEP 847 days
eks-user AKIAII4CCN6AA 288 days
nb-dev-api AKIAI7OTKONT 199 days
Oracle_RMAN AKIAIAWETFUK 134 days
text@abc.com AKIAJ4DMBBCEP 120 days
eks-user AKIAJFUU2ASII 100 days
nb-dev-api AKIAICIDXLDU 100 days

This should works

from operator import itemgetter

aws_string = """eks-user            AKIAII4CCN6AA           288  days
eks-user            AKIAJFUU2ASII           100  days
Oracle_RMAN         AKIAJ4DMBBCEP           847  days
Oracle_RMAN         AKIAIAWETFUK            134  days
nb-dev-api          AKIAI7OTKONT            199  days
nb-dev-api          AKIAICIDXLDU            100  days
text@abc.com                    AKIAJ4DMBBCEP           120      days"""


def sort_string(string):
    string = string.split("\n")
    array_of_data = []
    for line in string:
        array_of_data.append(line.split())
    #array_of_data = sorted(array_of_data,key=lambda l:l[2], reverse=True)
    array_of_data = sorted(array_of_data, key=itemgetter(2), reverse=True)

    for l in array_of_data:
        array_of_data[array_of_data.index(l)] = " ".join(l)

    array_of_data = "\n".join(array_of_data)
    return array_of_data
complianceusers = sort_string(aws_string)
print(complianceusers)

output

Oracle_RMAN AKIAJ4DMBBCEP 847 days
eks-user AKIAII4CCN6AA 288 days
nb-dev-api AKIAI7OTKONT 199 days
Oracle_RMAN AKIAIAWETFUK 134 days
text@abc.com AKIAJ4DMBBCEP 120 days
eks-user AKIAJFUU2ASII 100 days
nb-dev-api AKIAICIDXLDU 100 days
PythonProgrammi
  • 22,305
  • 3
  • 41
  • 34
  • Thank you, Gianni, for your quick response. – SKR Jun 07 '19 at 20:36
  • I got an error: Response: `{ "errorMessage": "list index out of range", "errorType": "IndexError", "stackTrace": [ [ "/var/task/lambda_function.py", 90, "lambda_handler", "complianceusers = SortUsers(username)" ], [ "/var/task/lambda_function.py", 115, "SortUsers", "arry_of_data = sorted(arry_of_data, key=itemgetter(2), reverse=True)" ] ] }` – SKR Jun 07 '19 at 20:39
  • here is my code: ` complianceusers = SortUsers(username) print(complianceusers) def SortUsers(username): string = username.split('\n') arry_of_data = [] for line in string: arry_of_data.append(line.split()) arry_of_data = sorted(arry_of_data, key=itemgetter(2), reverse=True) '''for l in arry_of_data: arry_of_data[arry_of_data.index(1)] = " ".join(1) arry_of_data = '\n'.join(arry_of_data)''' return arry_of_data` – SKR Jun 07 '19 at 20:40
0

Here's a simple solution specific to your question

arr = [l.split() for l in aws_string.split('\n')]
arr.sort(key=lambda l:int(l[2]), reverse=True)
s = '\n'.join('\t'.join(a) for a in arr)
print(s)

This will produce the following output

Oracle_RMAN     AKIAJ4DMBBCEP       847     days
eks-user        AKIAII4CCN6AA       288     days
nb-dev-api      AKIAI7OTKONT        199     days
Oracle_RMAN     AKIAIAWETFUK        134     days
text@abc.com    AKIAJ4DMBBCEP       120     days
eks-user        AKIAJFUU2ASII       100     days
nb-dev-api      AKIAICIDXLDU        100     days
Teshan Shanuka J
  • 1,448
  • 2
  • 17
  • 31
  • thanks for a quick reply. I got a syntax error. ` 87 arr = [l.split() for l in username.split('\n')] 88 arr.sort(key=lamda l:int(1[2]), reverse=True) 89 s = '\n'.join('\t'.join(a) for a in arr) 90 print(s) ` error message: _ "errorMessage": "Syntax error in module 'lambda_function'" } Request ID: "9b2d698b-665d-4782-ae67-37b8b6c9cb67" Function Logs: START RequestId: 9b2d698b-665d-4782-ae67-37b8b6c9cb67 Version: $LATEST Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 88) _ – SKR Jun 07 '19 at 20:52
  • You wrote `lamda` instead of `lambda`. And it is `int(l[2])` not `int(1[2])` – Teshan Shanuka J Jun 10 '19 at 05:23