首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我有一些列表,我已经合并了它们,但是我如何才能将降序的值放入STD中呢?

我有一些列表,我已经合并了它们,但是我如何才能将降序的值放入STD中呢?
EN

Stack Overflow用户
提问于 2018-05-28 19:28:40
回答 3查看 37关注 0票数 2

我的列表如下:

代码语言:javascript
复制
['river: 0.3']
['spread: 0.04']
['idaho: 0.5']

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

代码语言:javascript
复制
"the largest value is idaho"

以下是我的尝试,但当我想排名时,我失败了:

代码语言:javascript
复制
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])

所需的标准输出为:

代码语言:javascript
复制
idaho 0.5
river 0.3
spread 0.04
the largest value is idaho
EN

回答 3

Stack Overflow用户

发布于 2018-05-28 19:38:00

您的代码中有几个错误。

首先,

代码语言:javascript
复制
['river: 0.3']
['spread: 0.04']
['idaho: 0.5']

不存在配对(即不是(x,y)的形式)。

你需要的是这样的东西:

代码语言:javascript
复制
u = ['river', 0.3]
v = ['spread', 0.04]
s = ['idaho', 0.5]

现在我们不能将它们与加号(+)运算合并,而是将它们合并在一起

代码语言:javascript
复制
mergelist = [u, v, s]

然后

代码语言:javascript
复制
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而不是ranklist,因为现在它是一个列表列表。

票数 0
EN

Stack Overflow用户

发布于 2018-05-28 19:39:24

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

代码语言:javascript
复制
>>> 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}

现在,您有了一个漂亮、整洁的字典,可以方便地进行查找操作。

代码语言:javascript
复制
>>> d['river']
0.3

你现在可以按照值的降序对字典的items进行排序...

代码语言:javascript
复制
>>> from operator import itemgetter
>>> sorted(d.items(), key=itemgetter(1), reverse=True)
[('idaho', 0.5), ('river', 0.3), ('spread', 0.04)]

..。或者,如果您只需要具有最大值的(键,值)对,则使用max内置函数。

代码语言:javascript
复制
>>> max(d.items(), key=itemgetter(1))
('idaho', 0.5)
>>>
>>> _, max_value = max(d.items(), key=itemgetter(1))
>>> max_value
0.5
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 19:54:12

尝试将名称和浮点数添加到新字典中,将名称作为键,将浮点数作为值,然后获取具有最大值的键:

代码语言:javascript
复制
rank = {}
u = ['river: 0.3']
v = ['spread: 0.04']
s = ['idaho: 0.5']
for i in u+v+s:
   rank[i.split(': ')[0]] = float(i.split(': ')[-1])
print("the largest value is {[0]}".format([i for i in rank.keys() if rank[i] == max(rank.values())]))

输出:

代码语言:javascript
复制
the largest value is idaho
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50565371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档