繁体   English   中英

在它们的 int 值之后对 str 进行排序(Python、JSON)

[英]Sort a str after their int value (Python, JSON)

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

我的代码的简化版本:

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)

output 是:

red 1
blue 3
green 2

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

blue 3
green 2
red 1

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

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

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

谢谢:)

而不是使用:

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

利用:

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

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

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

Output:

blue 3
green 2
red 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM