2015-12-08 72 views
1

全部,蟒蛇按值排序字典項然後鍵

我很難按值排序字典,然後打印。

我對象(數據集)看起來像以下...

dict_items([(0, {'studentName': 'dan', 'Score': 80.0}), (1, {'studentName': 'rob', 'Score': 92.0})]) 

我想通過得分和打印排序,但我慘遭失敗。我建議使用以下方法按StudentName排序,如果它有幫助的話。

entries = sorted([(dataSet[entry]['studentName'], dataSet[entry]['Score']) for entry in dataSet]) 
    for name, score in entries: 
    print(('Student: {} -- Score: {}%'.format(name, score))) 
+0

我們可以看到dataSet的內容嗎? –

+0

按分數排序,然後名稱可能不會工作,除非你打算有可以排序名稱的分數範圍。 – SirParselot

+0

@AyushShanker編輯,使之更明顯。 –

回答

2
MyDict = {0: {'Score': 80.0, 'studentName': 'dan'}, 
      1: {'Score': 92.0, 'studentName': 'rob'}, 
      2: {'Score': 10.0, 'StudentName': 'xyz'}} 

這將返回字典中的鍵值對列表進制,通過值排序,從最高到最低:

sorted(MyDict.items(), key=lambda x: x[1], reverse=True) 

對於通過按鍵排序的字典,使用以下命令:元組的

sorted(MyDict.items(), reverse=True) 

返回是一個列表,因爲字典本身不能進行排序。

這可以打印或發送到進一步的計算。

0

如果你需要的是按分數值排序鍵列表:

d = {0: {'Score': 80.0, 'studentName': 'dan'}, 
    1: {'Score': 92.0, 'studentName': 'rob'}, 
    2: {'Score': 10.0, 'studentName': 'xyz'}} 

sorted(d, key=lambda k: d[k]['Score']) 

產生

[2, 0, 1] 

否則,您可以使用一個有序字典

from collections import OrderedDict 
od = OrderedDict(sorted(d.items(), key=lambda i: i[1]['Score'])) 

它給你

OrderedDict([(0, {'Score': 80.0, 'studentName': 'dan'}), (1, {'Score': 92.0, 'studentName': 'rob'})]) 

,你可以打印出漂亮

for v in od.values(): 
    print(v['Score'], v['studentName']) 

10.0 xyz 
80.0 dan 
92.0 rob 
+0

會滿足您的需求嗎? – Pynchia

0

假設你的對象是的dictstuples一個list(我可以通過給出的數據達到最接近的解釋),這樣就足夠了:

>>> dict_items = [(0, {'Score': 80.0, 'studentName': 'dan'}), (1, {'Score': 92.0, 'studentName': 'rob' 
})] 
>>> sorted(dict_items, key=lambda x: x[1]['Score']) 
# [(0, {'Score': 80.0, 'studentName': 'dan'}), (1, {'Score': 92.0, 'studentName': 'rob' 
})] 
0

另一種方法是在下面的,也許有人需要:

d = {0: {'Score': 80.0, 'studentName': 'dan'}, 
    1: {'Score': 92.0, 'studentName': 'rob'}, 
    2: {'Score': 10.0, 'StudentName': 'xyz'}} 

sorted(d, cmp = lambda a,b: cmp(d[a]['Score'],d[b]['Score'])) 
0

我只想用:

def comp(x,y): 
    if x[1]['Score'] != y[1]['Score']: 
     return 1 if x[1]['Score'] > y[1]['Score'] else -1 
    elif x[1]['studentName'] < y[1]['studentName']: 
     return -1 
    elif x[1]['studentName'] > y[1]['studentName']: 
     return 1 
    else: 
     return 0 

然後

sorted(dict_items, comp) 

例如,對於

dict_items = [(0, {'Score': 80.0, 'studentName': 'dan'}), 
       (1, {'Score': 92.0, 'studentName': 'rob'}), 
       (2, {'Score': 70.0, 'studentName': 'foo'})] 

它給:

[(2, {'Score': 70.0, 'studentName': 'foo'}), (0, {'Score': 80.0, 'studentName': 'dan'}), 
(1, {'Score': 92.0, 'studentName': 'rob'})] 

當心:你的問題標題是關於dictionnary項目。答案與問題中的代碼一致,但只是對元組列表進行排序。如果你真的有一個字典d,你應該使用sorted(d.items())