我有一些列表,我已经合并他们,但我如何才能降序值,并把它作为标准?

2024-09-28 03:15:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我的列表如下:

['river: 0.3']
['spread: 0.04']
['idaho: 0.5']

我想先将它们合并在一起,然后按值降序排列,并将其作为标准输出。最后打印一个句子,例如最高值为0.711,它将打印:

"the largest value is idaho"

这是我的尝试,但我失败了,当我想排名:

u = ['river: 0.3']
v = ['spread: 0.04']
s = ['idaho: 0.5']
mergelist = u + v + s
ranklist = sorted(mergelist, key=lambda x: x[1], reverse=True)
for i in ranklist:
    print(' '.join(list(map(str, i))))
print("the largest value is" + ' ' + ranklist[0])

所需的标准输出为:

idaho 0.5
river 0.3
spread 0.04
the largest value is idaho

Tags: the列表标准isvalue句子sortedprint
3条回答

第一个问题是数值仍然在字符串中(出于某种原因,字符串在一个元素列表中)。我建议您按':'分割字符串,并使用字典作为合并数据结构,而不是列表

>>> u = ['river: 0.3']
>>> v = ['spread: 0.04']
>>> s = ['idaho: 0.5']
>>> 
>>> d = {}
>>> for item, in (u, v, s):
...     key, value = item.split(':')
...     d[key] = float(value)
... 
>>> d
{'spread': 0.04, 'river': 0.3, 'idaho': 0.5}

注意item,解压长度为1的列表

当然,如果您硬编码了uvs,您也可以直接输入 d = {'river': 0.3, 'spread': 0.04, 'idaho': 0.5}

现在您有了一个很好的、干净的字典,便于查找操作

>>> d['river']
0.3

现在可以按值降序对dict的items排序

>>> from operator import itemgetter
>>> sorted(d.items(), key=itemgetter(1), reverse=True)
[('idaho', 0.5), ('river', 0.3), ('spread', 0.04)]

。。。如果您只需要具有最大值的(key,value)对,也可以使用max内置项

>>> max(d.items(), key=itemgetter(1))
('idaho', 0.5)
>>>
>>> _, max_value = max(d.items(), key=itemgetter(1))
>>> max_value
0.5

这是一种方法

u = ['river: 0.3']
v = ['spread: 0.04']
s = ['idaho: 0.5']
mergelist = u + v + s

import operator

d = {}
for i in mergelist:
    val = i.split(":")
    d[val[0].strip()] = float(val[1].strip())

print("the largest value is {}".format(max(d.items(), key=operator.itemgetter(1))[0]))

输出:

the largest value is Idaho
  • :拆分字符串
  • 从拆分值生成dict
  • 使用运算符从dict中获取最大值

根据评论中的要求

for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True):
    print(k, v)

输出:

idaho 0.5
river 0.3
spread 0.04

你的代码中有几个错误

首先

['river: 0.3']
['spread: 0.04']
['idaho: 0.5']

没有对(即不是(x,y)的形式)

你需要的是这样的东西:

u = ['river', 0.3]
v = ['spread', 0.04]
s = ['idaho', 0.5]

现在我们不能把它们和加号(+)运算合并,而是

mergelist = [u, v, s]

然后呢

ranklist = sorted(mergelist, key=lambda x: x[1], reverse=True)
for i in ranklist:
    print(' '.join(list(map(str, i))))
print("the largest value is" + ' ' + str(ranklist[0][0]))

注意,我使用ranklist[0][0]而不是ranklist[0],因为现在它是一个列表列表

相关问题 更多 >

    热门问题