【问题标题】:Sort a str after their int value (Python, JSON)在它们的 int 值之后对 str 进行排序(Python、JSON)
【发布时间】:2020-03-14 22:44:30
【问题描述】:

首先:对不起,如果标题具有误导性,我对术语了解不多。 :/

我的代码的简化版本:

import json

y = {}
y['red'] = {'name': "red", 'p': 1}
y['blue'] = {'name': "blue", 'p': 3}
y['green'] = {'name': "green", 'p': 2}

with open('y.json', 'w') as f:
    json.dump(y, f)

f = open('y.json')
y = json.load(f)


z = '%s%s%s' % (y['red']['name'], " ", y['red']['p'])
zz = '%s%s%s' % (y['blue']['name'], " ", y['blue']['p'])
zzz = '%s%s%s' % (y['green']['name'], " ", y['green']['p'])


print(z)
print(zz)
print(zzz)

输出是:

red 1
blue 3
green 2

现在我想在 p 的值之后对该输出进行排序。 (数字越大,输出越高。有点像足球中的图表)所以我想要输出:

blue 3
green 2
red 1

我希望它是自动化的,所以我不只是想写

print(zz)
print(zzz)
print(z)

在我的原始代码中,JSON 值也不止三个,所以我不想要任何超长的 if 语句。

谢谢你:)

【问题讨论】:

    标签: python json string sorting int


    【解决方案1】:

    而不是使用:

    print(z)
    print(zz)
    print(zzz)
    

    用途:

    print('\n'.join(sorted([z, zz, zzz], key=lambda x: int(x.split()[-1]), reverse=True)))
    

    【讨论】:

    • 嘿,感谢您的快速评论!如果我尝试得到:SyntaxError: unexpected EOF while parsing。我必须做其他事情才能让它工作吗?
    • @SkyThaKid 编辑了再试一次
    • 哦,从来没有。您的答案中缺少 ) :p。但是现在它是从 1 到 3 排序,而不是从 3 到 1 排序。有没有办法反转它?
    • @SkyThaKid 现在?
    • 是的,这正是我想要的,非常感谢! :)
    【解决方案2】:

    您可以跳过y = json.load(f)之后的部分并使用以下解决方案:

    for dct in sorted(y.values(), key=lambda x: x['p'], reverse=True):
        print(dct['name'], dct['p'])
    

    输出:

    blue 3
    green 2
    red 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-25
      • 2016-09-23
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多