Python排序字​​典

时间:2018-12-13 02:49:08

标签: python sorting dictionary tuples

如果我有一个字典,在一个元组中每个条目都有两个值 例如。 (乔恩,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:“浮动”对象不可调用

任何帮助都是伟大的。

3 个答案:

答案 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()