2017-04-02 5 views
0
counts = {'A1':3,'A2':2,'A3':1,'A4':10,'B1':11,'B2':12,'B3':3,'B4':0,'C1':3,'C2':16,'C3':8,'C4':2} 


#Order grid 
def orderGrid(grid): 

    lst = list() 
    for key,val in grid.items(): 
     lst.append((val,key)) 

    lst.sort(reverse=True) 

    for val,key in lst: 
     print key, val 

#Order row 
def orderRow(row): 
    count = dict() 
    for key in row.items(): 
     if key[0] not in count: 
      count[key] = row[key] 
     else: 
      count[key] += row[key] 
    print 'A:', count 

orderGrid関数は正常に実行できますが、orderrow関数はクラスタ用です。「A」から始まるすべての量、行をランク付け( 'A'、 'B'、 'C​​'、 'D')すべて同じ 'key [0]'を取得し、その値を辞書で計算する方法

+0

は、ご希望の出力は何で、次のようになり交換しますか? – manvi77

+0

@ manvi77のように、{A行:16、B行:26 ...} – hsbzzhz

答えて

0

あなたはsortedを使用してcounts

import operator 

sorted_x = sorted(counts.items(), key=operator.itemgetter(1), reverse=True) 

に直接適用することができますが、新しいdictを取り、キーを割り当てることができます値は次のとおりです。

In [71]: mydict = {} 

In [72]: for k, v in counts.items(): 
    ...:  if k[0] not in mydict: 
    ...:   mydict[k[0]] = v 
    ...:  else: 
    ...:   mydict[k[0]] += v 
    ...:   

In [73]: mydict 
Out[73]: {'A': 16, 'B': 26, 'C': 29} 

機能が

import operator 

counts = {'A1':3,'A2':2,'A3':1,'A4':10,'B1':11,'B2':12,'B3':3,'B4':0,'C1':3,'C2':16,'C3':8,'C4':2} 


#Order grid 
def orderGrid(grid): 
    sorted_x = sorted(counts.items(), key=operator.itemgetter(1), reverse=True) 
    for key,val in sorted_x: 
     print key, val 

#Order row 
def orderRow(row): 
    mydict = {} 
    for k, v in row.items(): 
     if k[0] not in mydict: 
      mydict[k[0]] = v 
     else: 
      mydict[k[0]] += v 
    print mydict 
関連する問題