2016-07-26 163 views
0

我一直想弄清楚如何排序這些字典:d1d2裏面的字典d3嵌套字典排序

d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for k,v in sorted(d3.items()): 
    for k,v in sorted(d3['breakfast'].items()): 
     for k,v in sorted(d3.items()): 
      print(k,v) 

這是輸出:

breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 

它排序兩個breakfastdessert正確,那裏面dessert'cream''eggs'是在錯誤的順序。

它應該是:

dessert {'cake':1, 'cream':1} 

,它還會打印「排序」字典d3四次,我不知道是什麼原因。

據我所知,可能有更有效的方法來做到這一點,所以任何信息都是值得歡迎的。

+0

請解釋你希望發生的事情(例如,你想看到什麼輸出),因爲它不清楚你的問題。 – Amadan

+0

這是非邏輯的代碼,因爲你可以做最後的循環,你會得到兩個輸出,我沒有得到你的代碼 –

+0

你不應該有3個嵌套'for'循環都具有相同的循環變量(' k'和'v'),因爲兩個外部循環基本上只是讓內部循環運行4次。請注意,僅僅執行'print(k,v)'就會打印出「v」作爲整個字典未排序。 –

回答

2

所以你的算法有一些問題,主要是你嵌套的方式太多次,每次循環相同的東西。這裏有一個更好的算法:

for k,v in sorted(d3.items()): 
    print(k + ":") 
    for k2,v2 in sorted(v.items()): 
     print("\t" + k2 + ", " + str(v2)) 

它格式化的回答是這樣的:

breakfast: 
    cheese, 1 
    eggs, 1 
dessert: 
    cake, 1 
    cream, 1 

我不知道你的意圖的格式是什麼 - 希望你可以修改它是你想要的東西。如您所見,此次循環首先通過d3,,然後通過d3的元素迭代,而不是再次d3。這意味着您將在嵌套字典中深入到另一個層次,而不是在之前多次打印相同字典之前進行的操作。

+0

所以我試了一下,我不得不添加()到打印語句,因爲它給了我一個錯誤,起初它沒有工作,但然後我只是()圍繞錯誤的東西。現在感謝它的工作!這只是一個測試代碼,以瞭解它是如何工作的,然後將其實施到另一個正在開發的程序中。 – Doppel

+0

它不適合你嗎?你是否打算做一些不同的事情?我需要更多的信息比 – James

+0

抱歉,我一直按輸入,它發佈評論時,我的意思是下線。即時通訊將嘗試並將其實施到我的主程序,如果我需要一些更多的幫助,我可以將它添加到這個問題? – Doppel

0
d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for key,val in sorted(d3.items()): 
    print(key,val) 
+1

請編輯更多信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。 – abarisone