您可以按值对包含数字的字符串数组进行排序吗? [复制]

Posted

技术标签:

【中文标题】您可以按值对包含数字的字符串数组进行排序吗? [复制]【英文标题】:Can you sort a array of strings that containt numbers by value? [duplicate] 【发布时间】:2021-12-13 10:11:25 【问题描述】:

我有一个数组,其中包含用户的姓名和金钱。 我正在尝试做的是按金额按降序对数组进行排序,这样我就可以为谁拥有最多的钱做一个排行榜。

这是我当前的代码:

@client.command()
async def score(ctx):
  channel = ctx.message.channel
  data = loadjson()
  scoreboard = []
  Minimum_money = 0
  for line in data:
    Current_name = line["name"]
    Current_money = line["money"]
    if Current_money > Minimum_money:
      value = Current_name + " " + str(Current_money)
      scoreboard.append(value)
    elif not scoreboard:
      scoreboard.append("Empty!")
    
  return print(scoreboard)

这是我得到的输出:

我得到的输出没问题,数字只需要按降序排列即可。我搜索了解决方案,但找不到任何东西,感觉很容易解决,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

做到这一点的最佳方法是分离您的数据。你有一个字符串中的名字和钱。我们先把它们分开:

data = ["Mohammad 10", "Yucel 15", "Yusuf 12"]
data_sep = [[d.split()[0], float(d.split()[1])] for d in data]

print(data_sep) # [['Mohammad', 10.0], ['Yucel', 15.0], ['Yusuf', 12.0]]

现在让我们按第二列对它们进行排序(参见this):

print(sorted(data_sep, key=lambda l: l[1], reverse=True)) # Toggle reverse to change descending/ascending

【讨论】:

【参考方案2】:

您可以使用以下函数对数据进行排序,

def quicksort(data):
    left = []
    right = []
    ref = [data[int(len(data)/2)]]
    

    for line in data:
        if line == ref[0]:
            continue
        if line["money"] < ref[0]["money"]:
            right.append(line)
        else:
            left.append(line)
    
    if left != []:
        left = quicksort(left)
    if right != []:
        right = quicksort(right)

    sorted_data = left + ref + right

    return sorted_data

假设你的数据是这种形式


    data = ["name":"himanshu", "money":25, "name":"aniket", "money":34, "name":"ani", "money":3]

【讨论】:

以上是关于您可以按值对包含数字的字符串数组进行排序吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

按值对HashMap进行排序[重复]

如何按值对多维数组进行排序

Firebase 按值对类数组进行排序

如何在PHP中按值对对象数组进行排序

在 JavaScript 中按值对字典进行排序

按值对 JSON 进行排序 [重复]