我有一些列表,我已经合并了它们,但是如何按降序排列值并将其作为 STD?
I have some lists, I have merge them but how can I the value in descending order and put it as STD?
显示我的列表:
['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
这是一种方法
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
- 将字符串拆分为
:
- 根据拆分值形成字典。
- 使用运算符从你的字典中获取最大值。
根据评论要求
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] 因为现在它是一个列表列表。
第一个问题是数值仍然在字符串中(出于某种原因,它们在一个元素列表中)。我建议您按 ':'
拆分字符串并使用字典作为合并数据结构而不是列表。
>>> 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 的列表。
当然,如果您对 u
、v
和 s
进行了硬编码,您也可以只键入
d = {'river': 0.3, 'spread': 0.04, 'idaho': 0.5}
in.
现在您有一个漂亮、干净的字典,可以轻松进行查找操作。
>>> d['river']
0.3
您现在可以按值降序对字典的 items
进行排序...
>>> from operator import itemgetter
>>> sorted(d.items(), key=itemgetter(1), reverse=True)
[('idaho', 0.5), ('river', 0.3), ('spread', 0.04)]
... 或者如果您只需要具有最大值的(键,值)对,则使用内置的 max
。
>>> max(d.items(), key=itemgetter(1))
('idaho', 0.5)
>>>
>>> _, max_value = max(d.items(), key=itemgetter(1))
>>> max_value
0.5
尝试将名称和浮点数添加到新字典中,名称作为键,浮点数作为值,然后获取具有最大值的键:
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())]))
输出:
the largest value is idaho
显示我的列表:
['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
这是一种方法
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
- 将字符串拆分为
:
- 根据拆分值形成字典。
- 使用运算符从你的字典中获取最大值。
根据评论要求
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] 因为现在它是一个列表列表。
第一个问题是数值仍然在字符串中(出于某种原因,它们在一个元素列表中)。我建议您按 ':'
拆分字符串并使用字典作为合并数据结构而不是列表。
>>> 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 的列表。
当然,如果您对 u
、v
和 s
进行了硬编码,您也可以只键入
d = {'river': 0.3, 'spread': 0.04, 'idaho': 0.5}
in.
现在您有一个漂亮、干净的字典,可以轻松进行查找操作。
>>> d['river']
0.3
您现在可以按值降序对字典的 items
进行排序...
>>> from operator import itemgetter
>>> sorted(d.items(), key=itemgetter(1), reverse=True)
[('idaho', 0.5), ('river', 0.3), ('spread', 0.04)]
... 或者如果您只需要具有最大值的(键,值)对,则使用内置的 max
。
>>> max(d.items(), key=itemgetter(1))
('idaho', 0.5)
>>>
>>> _, max_value = max(d.items(), key=itemgetter(1))
>>> max_value
0.5
尝试将名称和浮点数添加到新字典中,名称作为键,浮点数作为值,然后获取具有最大值的键:
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())]))
输出:
the largest value is idaho