在 str 的 int 值之后排序 (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)
输出为:
red 1
blue 3
green 2
现在我想在 p 的值之后对输出进行排序。 (数字越大,输出越高。有点像足球中的图表)所以我想要输出:
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'])
输出:
blue 3
green 2
red 1
首先:如果标题有误导性,我很抱歉,我对术语了解不多。 :/
我的代码的简化版本:
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 语句。
谢谢:)
而不是使用:
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'])
输出:
blue 3
green 2
red 1