【问题标题】:Python to sort summed dictionary list valuesPython对求和的字典列表值进行排序
【发布时间】:2018-12-31 02:09:45
【问题描述】:

我无法将我的总和值从最高到最低排序。

字典是这样设置的:

dictionary = {name:[dollar amount 1, dollar amount 2, etc.]}

我需要汇总美元金额并按降序打印结果(按美元总额)。

目前我用这个:

for pair in dictionary:
    print(pair, f'{sum(dictionary[pair]):.2f}')

我现在不确定在哪里或如何排序,我只是模糊地熟悉 lambda 的用法。

谢谢!

【问题讨论】:

  • 字典本身没有排序,因此无法排序。您必须将其放在(临时)列表中或使用 OrderedDict。

标签: python python-3.x list sorting dictionary


【解决方案1】:

您可以使用字典理解,然后使用 sorted 并通过 for 循环进行迭代:

from operator import itemgetter

# input dictionary; create new dictionary with values totalled
d = {'Joe': [5, 10, 15], 'Paul': [2, 5, 1], 'Andrew': [5, 20, 15]}
d_sums = {k: sum(v) for k, v in d.items()}

# sort by value descending and iterate, gives list of tuples
sums_sorted = sorted(d_sums.items(), key=itemgetter(1), reverse=True)

# iterate and print
for name, dollars in sums_sorted:
    print(f'{name} {dollars}')

# Andrew 40
# Joe 30
# Paul 8

【讨论】:

  • 谢谢,我最终遵循了您所做的大部分工作,但添加了以下建议中的 lambda,以免导入任何内容。
  • @Iansberg,当然; itemgetter(1)lambda x: x[1] 相比推荐,但这完全取决于您。
【解决方案2】:

如果您只想使用 lambda 函数打印排序后的字典!

from collections import OrderedDict
import numpy as np
dictionary = {'xyx':np.random.randint(100,size=20),'xzy':np.random.randint(100,size=20),'xyz':np.random.randint(100,size=20)}

for i,j in sorted(dictionary.items(), key=lambda x: x[1].sum(),reverse=True):
    print(i,j.sum())

#output:
xyx 1026
xzy 981
xyz 833

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2021-07-12
    • 2010-11-15
    相关资源
    最近更新 更多