从dict {key:list}获取最大值的前N个键

时间:2017-03-30 13:54:17

标签: list python-3.x dictionary

是否可以通过简单的方法从dict {key:list}中列出具有最大值的前N个键     有没有简单的方法可以从dict {key:list}

中列出具有最大值的前N个键
def main():

    for x in range(len(sale10k)):
        timelist.append(sale10k[x][3])
        pricesList.append(sale10k[x][4])
        if sale10k[x][0] in salesByCategory.keys():
            salesByCategory[sale10k[x][0]].append(float(sale10k[x][4]))
        else:
            salesByCategory[sale10k[x][0]]=[]
            salesByCategory[sale10k[x][0]].append(float(sale10k[x][4]))

    salesByCategory1={}
    for key,value in salesByCategory.items():
        salesByCategory1[key]=sum(salesByCategory.get(key))

    #fiveLarges=heapq.nlargest(5,salesByCategory1,key=salesByCategory1.get)
    salesBycatalog={}
    for y in range(len(catalog)):
       salesBycatalog[catalog[y][0]]=catalog[y][5]
    totalByGroup={}
    for key, value in salesBycatalog.items():
        if value in totalByGroup.keys():
            totalByGroup[value].append(salesByCategory1.get(key))
        else:
            totalByGroup[value]=[]
            totalByGroup[value].append(salesByCategory1.get(key))

    print(totalByGroup)





if __name__ == "__main__":
    main()

 i have 2 files excel.cvs 

my output from now is this :


{'POLO SHIRTS': [2609.76, 13339.109999999991, 15622.410000000007], 'APPAREL ACCESSORIES': [22596.24999999999, 20901.099999999995, 31007.8], 'PANTS': [8031.729999999998, 11179.949999999999, 5405.839999999997, 9023.949999999999, 21523.819999999996, 26030.800000000017], 'FOOTWEAR ACCESSORIES': [8686.369999999999], 'GLIDING SP.EQUIPMENT': [22136.399999999987, 27678.920000000006, 14222.21999999999, 30013.37000000001], 'SHOES': [1903.66, 25443.21999999999, 22152.530000000006, 11585.410000000002, 38504.679999999986, 7787.670000000004, 10256.860000000002, 1377.1199999999997, 15459.799999999992, 20919.56000000001, 6299.769999999996, 1555.4499999999998, 17470.460000000006, 29361.220000000034, 4070.9000000000033, 27045.450000000004, 20721.829999999994, 780.55, 24671.590000000015, 13189.570000000002, 6442.700000000001, 6105.390000000005, 12701.659999999998, 29418.89000000001, 7295.620000000001, 26344.420000000002, 3262.12, 11710.460000000006, 3272.2999999999993, 17055.989999999994, 9019.77, 12722.570000000003, 20020.150000000005, 30164.860000000026, 17513.14, 3168.6200000000003, 27008.24, 14585.679999999988, 15273.48, 24172.329999999998, 33968.96000000003, 35480.790000000015, 25150.459999999992, 24207.679999999997, 26909.090000000007, 17692.079999999998, 27844.97999999999, 33847.389999999985, 13266.239999999994, 11757.349999999997, 24469.410000000018, 8214.879999999997, 3966.6899999999964, 5336.910000000003, 27766.659999999978, 24636.97000000002, 21330.829999999994, 10331.680000000004, 19769.529999999995, 20764.439999999984, 2873.509999999999, 23263.23, 15127.240000000003, 13282.320000000003, 32917.03000000001, 17657.12, 9959.55, 21052.779999999995, 16015.79, 2667.2699999999995, 16041.830000000004, 2309.9000000000005, 8095.450000000001, 23628.889999999985, 3846.259999999999, 6795.61, 14608.109999999995, 6422.360000000001, 3241.279999999999, 19220.27999999999, 20836.899999999994, 28446.07000000001, 13984.979999999992, 10006.460000000003, 14417.309999999998, 9069.470000000001, 8081.38, 1766.8899999999999, 19041.750000000004, 3310.279999999999, 3649.49, 11089.069999999994, 10946.420000000002, 16297.91, 3788.1000000000004, 27356.640000000007, 14024.480000000001, 29409.03], 'SUITS': [28587.990000000016, 14337.800000000001], 'BALLS': [25855.07, 15207.729999999992, 25567.809999999987, 8428.509999999998, 15119.609999999995, 26069.969999999983, 29843.490000000023], 'TOPS': [1673.2000000000005, 8673.400000000001, 23610.79999999999, 2090.380000000001], 'HEADWEAR': [2075.3000000000015, 18891.799999999996, 39717.93, 33657.65, 9965.720000000005, 12030.020000000006, 670.9999999999999, 12694.720000000007, 24846.22000000001, 1606.1799999999994, 9993.330000000002, 10154.900000000005], 'HARDWARE ACCESSORIES': [14619.109999999997], 'OTHER SHIRTS': [18013.450000000004], 'PROTECTION GEAR': [26454.929999999997], 'JERSEYS': [23741.06, 38425.269999999975], 'SANDALS/SLIPPERS': [9103.83, 21025.040000000005, 12702.349999999999, 26766.439999999984, 29818.339999999993], 'SHORTS': [14817.77, 29540.92999999998, 9415.059999999996, 14582.480000000001], 'JACKETS': [30096.11000000001, 13372.469999999998, 31145.73000000001, 6011.17, 12225.300000000003, 23485.399999999998, 13889.96], 'SWIMWEAR': [14035.140000000001, 20232.629999999997, 5142.340000000001, 2945.349999999998, 23495.320000000003, 8207.920000000004, 11972.729999999994], 'T-SHIRTS': [11130.700000000004, 8315.83, 8346.719999999998, 27847.550000000007, 22704.759999999995, 7828.200000000002, 17823.379999999997, 2248.46, 9012.14, 7774.72, 12030.049999999996, 4207.649999999999, 21293.16, 3159.4700000000007, 13385.12, 30507.87], 'UNDERWEAR': [10419.31, 31017.909999999993, 2794.590000000002, 18625.990000000005, 21829.879999999994], 'SWEATSHIRTS': [4317.6799999999985, 23453.049999999985, 28176.49000000001], 'TIGHTS': [23823.43999999999, 11180.129999999996], 'BAGS': [13980.240000000007, 18509.50999999999, 20064.309999999998, 22317.360000000004, 17641.04]}


i need this :


SHOES: 1519077.15 €
    T-SHIRTS: 207615.78 €
    HEADWEAR: 176304.77 €
    BALLS: 146092.19 €
    JACKETS: 130226.14 €

I have data stored in dict orderBygroup {key-list(of float values)} and need to take first 5 keys with max value. 
My second question is - dict salesByCategory1 is make with loping to salesByCategory and sum of all values to receive the total for article number.

我可以用一些聪明的方式获得总数吗?     是否有简单的方法来输出?

1 个答案:

答案 0 :(得分:0)

   totalByGroup1={}
    for key,value in totalByGroup.items():
        totalByGroup1[key]=sum(totalByGroup.get(key))

使用求和元素创建一个新字典。更多资源。

    sorted5=sorted(totalByGroup1, key=totalByGroup1.get, reverse=True)[:5]
    print(sorted5)

排序并获取前5个元素 输出是:['鞋子','T恤','头盔','球','夹克'] 更多的时间,更多的resurses

    for key in sorted5:
        print(key,': ','{0:.2f}'.format(totalByGroup1.get(key)))

现在结果: 鞋子:1519077.15 T恤:207615.78 HEADWEAR:176304.77 球:146092.19 夹克:130226.14

现在让我们再次询问我们是否有4条dict记录数据: 一个:[1,2,3],B:[6,7,8],C:[4,5,6],d:[9,10,11] 如何获得前2个键,按最大值排序的值 - >> d:30,B:21

如果我们在dict中有1000条记录 - ??如何获得按列表最大值排序的第一个N键 例如go:1563,do:1560,bo:1490,ro:1480 .. etc