【问题标题】:Python string data sortPython字符串数据排序
【发布时间】:2019-10-22 10:39:24
【问题描述】:

我的 AWS Python lambda 函数返回带有以下数据的字符串:

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 )

我想按年龄排序。

请告诉我适用于这里的建议?

提前谢谢你!

我尝试使用 sort 和 sorted 方法,但没有帮助。

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

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

我期望输出:

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

【问题讨论】:

标签: python


【解决方案1】:
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)

输出:

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

返回一个字符串

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)

输出:

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

这应该可行

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)

输出

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

【讨论】:

  • 感谢 Gianni 的快速回复。
  • 我收到一个错误:响应:{ "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)" ] ] }
  • 这是我的代码:` 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`
【解决方案2】:

这里有一个针对您的问题的简单解决方案

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)

这将产生以下输出

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

【讨论】:

  • 感谢您的快速回复。我遇到语法错误。 ` 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" 函数日志:START RequestId:9b2d698b-665d-4782-ae67-37b8b6c9cb67 版本:$LATEST 模块“lambda_function”中的语法错误:语法无效(lambda_function.py,第 88 行)_
  • 你写的是lamda而不是lambda。它是int(l[2]) 而不是int(1[2])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2023-02-06
  • 2017-03-04
  • 1970-01-01
相关资源
最近更新 更多