如何对 python 中的字符串中的数字进行排序
How to sort numbers in strings in python
抱歉...我的英语不是很好...所以我不知道如何提出这个问题...请阅读以便您能理解我想要什么...
我有一个带字典的 def:
{'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
我想要return这个:
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
但我的解决方案不 return 这个!
我的解决方案:
def formatted(a):
s=''
for i in a:
d='{0:<10s}{1:>6.2f}\n'.format(i, a[i])
s=s+d
s=s.rstrip()
return s
a={'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
print (formatted(a))
它returns:
John 30.37
Mike 84.50
Sara 97.55
Frank 75.99
我应该对这些数字进行排序...但我不知道该怎么做!
有人可以帮忙吗??
您需要使用 sorted
和 [operator.itemgetter][1]
在 values
上 sort
词典。
In [100]: _dict = collections.OrderedDict(sorted(d.items(), key=operator.itemgetter(1), reverse=True)) # d is your dictinory
In [101]: _dict
Out[101]:
OrderedDict([('Sara', 97.55),
('Mike', 84.5),
('Frank', 75.99),
('John', 30.37)])
然后你需要使用 collections.OrderedDict
因为 dictionaries
是散列密钥对。
for i, v in _dict.items():
d='{0:<10s}{1:>6.2f}\n'.format(i, v)
print(d)
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
>>> d = {'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
>>> b = sorted(d.items(), key=lambda x: x[1])
>>> print b
[('John', 30.37), ('Frank', 75.99), ('Mike', 84.5), ('Sara', 97.55)]
反向
>>> c = sorted(d.items(), key=lambda x: x[1] ,reverse=True)
>>> print c
[('Sara', 97.55), ('Mike', 84.5), ('Frank', 75.99), ('John', 30.37)]
用于印刷:
d = collections.OrderedDict(dict(c)) # c is upder dict
for i, v in d.items():
_dict_pair='{0:<10s}{1:>6.2f}\n'.format(i, v)
print(_dict_pair)
一行:
d = {'John': 30.370, 'Mike': 84.5, 'Sara': 97.55, 'Frank': 75.990}
print(
"\n".join(
'{0:<10s}{1:>6.2f}'.format(k, v) for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True)
)
)
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
解释:
- 首先,根据值对字典进行排序:
sorted(d.items(), key=lambda x: x[1], reverse=True)
=> sorted method in python
- 然后,将格式应用于所有已排序的项目 => list comprehension
- 最后,使用
"\n".join()
将每个人重新组合并格式化为一个由 \n
=> join method 分隔的字符串
- 最后,所有的东西都被print()方法打印出来了
抱歉...我的英语不是很好...所以我不知道如何提出这个问题...请阅读以便您能理解我想要什么... 我有一个带字典的 def:
{'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
我想要return这个:
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
但我的解决方案不 return 这个! 我的解决方案:
def formatted(a):
s=''
for i in a:
d='{0:<10s}{1:>6.2f}\n'.format(i, a[i])
s=s+d
s=s.rstrip()
return s
a={'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
print (formatted(a))
它returns:
John 30.37
Mike 84.50
Sara 97.55
Frank 75.99
我应该对这些数字进行排序...但我不知道该怎么做! 有人可以帮忙吗??
您需要使用 sorted
和 [operator.itemgetter][1]
在 values
上 sort
词典。
In [100]: _dict = collections.OrderedDict(sorted(d.items(), key=operator.itemgetter(1), reverse=True)) # d is your dictinory
In [101]: _dict
Out[101]:
OrderedDict([('Sara', 97.55),
('Mike', 84.5),
('Frank', 75.99),
('John', 30.37)])
然后你需要使用 collections.OrderedDict
因为 dictionaries
是散列密钥对。
for i, v in _dict.items():
d='{0:<10s}{1:>6.2f}\n'.format(i, v)
print(d)
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
>>> d = {'John':30.370, 'Mike':84.5, 'Sara':97.55, 'Frank': 75.990}
>>> b = sorted(d.items(), key=lambda x: x[1])
>>> print b
[('John', 30.37), ('Frank', 75.99), ('Mike', 84.5), ('Sara', 97.55)]
反向
>>> c = sorted(d.items(), key=lambda x: x[1] ,reverse=True)
>>> print c
[('Sara', 97.55), ('Mike', 84.5), ('Frank', 75.99), ('John', 30.37)]
用于印刷:
d = collections.OrderedDict(dict(c)) # c is upder dict
for i, v in d.items():
_dict_pair='{0:<10s}{1:>6.2f}\n'.format(i, v)
print(_dict_pair)
一行:
d = {'John': 30.370, 'Mike': 84.5, 'Sara': 97.55, 'Frank': 75.990}
print(
"\n".join(
'{0:<10s}{1:>6.2f}'.format(k, v) for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True)
)
)
Sara 97.55
Mike 84.50
Frank 75.99
John 30.37
解释:
- 首先,根据值对字典进行排序:
sorted(d.items(), key=lambda x: x[1], reverse=True)
=> sorted method in python - 然后,将格式应用于所有已排序的项目 => list comprehension
- 最后,使用
"\n".join()
将每个人重新组合并格式化为一个由\n
=> join method 分隔的字符串
- 最后,所有的东西都被print()方法打印出来了