Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对字典中的列表进行排序?_Python_Sorting_Dictionary - Fatal编程技术网

Python 如何对字典中的列表进行排序?

Python 如何对字典中的列表进行排序?,python,sorting,dictionary,Python,Sorting,Dictionary,我想做的是两件事实际上,首先,我需要列出以下清单: teammates={"Ali":[1,5,8],"James":[3,2,1],"Fred":[9,4,2]} 将数字列表相加,除以3,算出平均值,然后按从高到低的顺序排列,如下所示: Fred : 5 Ali : 4.7 James : 2 Fred : 9 Ali : 8 James : 3 其次,我需要让程序只打印每个队友的最高分数,然后按照如下方式从高到低排序: Fred : 5 Ali : 4.7 James : 2 Fr

我想做的是两件事实际上,首先,我需要列出以下清单:

 teammates={"Ali":[1,5,8],"James":[3,2,1],"Fred":[9,4,2]}
将数字列表相加,除以3,算出平均值,然后按从高到低的顺序排列,如下所示:

Fred : 5
Ali : 4.7
James : 2
Fred : 9
Ali : 8
James : 3
其次,我需要让程序只打印每个队友的最高分数,然后按照如下方式从高到低排序:

Fred : 5
Ali : 4.7
James : 2
Fred : 9
Ali : 8
James : 3
这将是非常有用的,因为我用它为我儿子的生日聚会 我已经搜索了几乎每一个与此类似的问题,却找不到任何有效的答案。。。任何帮助都将不胜感激。谢谢:

使用排序和lambda

>>> teammates={"Ali":[1,5,8],"James":[3,2,1],"Fred":[9,4,2]}
>>> sorted([[x,sum(y)/float(len(y))] for x,y in teammates.items()],key=lambda x:x[1])
[['James', 2.0], ['Ali', 4.666666666666667], ['Fred', 5.0]]
高分:

>>> sorted([[x,max(y)] for x,y in teammates.items()],key=lambda x:x[1],reverse=True)
[['Fred', 9], ['Ali', 8], ['James', 3]]
我建议您使用max来获取列表上的max值,sum来获取列表中所有元素的总和,len来获取数组的大小:

teammates={"Ali":[1,5,8],"James":[3,2,1],"Fred":[9,4,2]}

# Use sum and len to get average
teammates_average={
                    "Ali":sum(teammates['Ali'])/float(len(teammates['Ali'])),
                    "James":sum(teammates['James'])/float(len(teammates['James'])),
                    "Fred":sum(teammates['Fred'])/float(len(teammates['Fred'])),
                  }
Output: {'Ali': 4.666666666666667, 'Fred': 5.0, 'James': 2.0}
# Use max to get the highest value
teammates_highest={
                    "Ali":max(teammates['Ali']),
                    "James":max(teammates['James']),
                    "Fred":max(teammates['Fred']),
                  }
Output: {'Ali': 8, 'Fred': 9, 'James': 3}

# Order last output
sorted(teammates_highest.items(), key=operator.itemgetter(1), reverse=True)

Output: [('Fred', 9), ('Ali', 8), ('James', 3)]

对字典中的列表进行排序

 >>>>sorted(teammates.items(), key=lambda (k, v): v[1], reverse=True)
 >>>>[('Ali', [1, 5, 8]), ('Fred', [9, 4, 2]), ('James', [3, 2, 1])]

我们将使用3个不同的函数,它们的名称具有足够的描述性

def dict_of_means(d):
    return {k:sum(v)*1.0/v.count() for k, v in d.items()}
请注意乘以1.0可以强制使用浮点

def dict_of_max(d):
    return {k:max(v) for k, v in d.items()}
最后

def print_sorted(d,is_float=0):
    l = [(v, k) for k, v in d.items()]
    l.sort()
    for v, k in l[::-1]:
        if is_float:
            print "%-12s%5.2" % (k+" :", v)
        else:
            print "%-12s%2d" % (k+" :", v)
用法示例

评论

在这三个函数中都使用了d.items中的k,v的重复用法。 字典方法d.items提供元组列表,例如

In [34]: teammates.items()
Out[34]: [('James', [3, 2, 1]), ('Fred', [9, 4, 2]), ('Ali', [1, 5, 8])]
通过将每个元组的内容依次解包到循环变量k中来分配每个元组的内容,k代表key,v代表value


此时,在所谓的理解中,您可以使用花括号“{}”构建字典,或者使用直括号“[]”构建列表,您可以返回调用者,或者您可以进一步处理,就像print_sorted中的情况一样。

欢迎使用堆栈溢出,你能给我们看一下你已经试过但不能开始工作的东西吗?谢谢,这非常有帮助:如果问题现在解决了,如果我有什么大麻烦,我会告诉你的,否则,再次感谢!请不要犹豫。再见