如果我有一个字典,在一个元组中每个条目都有两个值 例如。 (乔恩,100) (ellie,200) (马蒂120) (史蒂夫,250) 我想按分数(第二值)的顺序对其进行排序。但是,我只想显示名称。 例如:史蒂夫,埃莉,马蒂,乔恩 我该怎么办?
f = open('data.csv','r')
reader = csv.reader(f)
new_dict = {}
for row in reader:
new_dict[row[0]] = random.gauss(float(row[1]), float(row[2]))
order_list = sorted(new_dict, key = new_dict[row[0]], reverse = False)
return order_list
到目前为止,我已经知道了,而且还出现了
之类的错误。"order_list = sorted(new_dict, key = new_dict[row[0]], reverse = False)"
TypeError:“浮动”对象不可调用
任何帮助都是伟大的。
答案 0 :(得分:0)
首先使用仅获取分数的键函数对值进行排序,然后从排序后的数据中获取对中的第一项。
from operator import itemgetter
order_list = [e[0] for e in sorted(new_dict.values(), key=itemgetter(1), reverse=True)]
reverse=True
是因为您首先想要得分最高的名称,所以它是降序排列,而不是默认的升序排列。
该itemgetter(1)
功能与lambda e: e[1]
等效,也可以使用。
order_list = [e[0] for e in sorted(new_dict.values(), key=lambda e: e[1], reverse=True)]
如果itemgetter(1)
似乎是制作简单lambda的漫长方式,请注意,您可以改用from operator import itemgetter as ig
然后写成key=ig(1)
答案 1 :(得分:0)
>>> d = {'ellie': 200, 'jon': 100, 'mati': 120, 'steve': 250}
>>> sorted(d, key=lambda k: d[k])
['jon', 'mati', 'ellie', 'steve']
sorted
将字典视为迭代器,并检索字典的键。
key
参数必须是一个函数(在本例中为未命名的函数,lambda
),该函数返回要排序的当前值的排序键。
答案 2 :(得分:0)
这是解决方案。
import pandas as pd
def names_ordered_by_score(file_name):
df = pd.read_csv(file_name, names=['name', 'score'])
df.sort_values(by='score', inplace=True)
return df.name.values.tolist()
names_ordered_by_score('data.csv')
这是一个硬编码的测试。
import pandas as pd
def names_ordered_by_score():
df = pd.DataFrame([('jon', 100),
('ellie', 200),
('mati', 120)],
columns=['name', 'score'])
df.sort_values(by='score', inplace=True)
return df.name.values.tolist()
names_ordered_by_score()