2017-07-20 220 views
-1

下面的for循環輸出代碼:需要幫助理解這個字典

def list_to_dict(li): 
      dct = {} 
      for item in li: 
       dct[item] = dct.get(item,0)+1 
       print(dct) 
      return dct 

    li = [1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 7, 7] 
    print(list_to_dict(li)) 

下面是輸出。我無法理解,輸出是如何來的?

{1: 1} 
{1: 2} 
{1: 3} 
{1: 3, 2: 1} 
{1: 3, 2: 1, 3: 1} 
{1: 3, 2: 1, 3: 2} 
{1: 3, 2: 1, 3: 2, 4: 1} 
{1: 3, 2: 1, 3: 2, 4: 2} 
{1: 3, 2: 1, 3: 2, 4: 3} 
{1: 3, 2: 1, 3: 2, 4: 4} 
{1: 3, 2: 1, 3: 2, 4: 5} 
{1: 3, 2: 1, 3: 2, 4: 5, 5: 1} 
{1: 3, 2: 1, 3: 2, 4: 5, 5: 1, 6: 1} 
{1: 3, 2: 1, 3: 2, 4: 5, 5: 1, 6: 1, 7: 1} 
{1: 3, 2: 1, 3: 2, 4: 5, 5: 1, 6: 1, 7: 2} 
{1: 3, 2: 1, 3: 2, 4: 5, 5: 1, 6: 1, 7: 2} 
+0

您是否意識到'dictionaries' **不能**有重複鍵? –

+4

這將對列表中的項目進行計數。什麼,*完全*你不明白?你必須對你的問題具體。 –

+0

'進口收藏品; ([1,1,1,2,3,3,4,4,4,4,5,5,6,7,7]);以及[ 'Out [..]:Counter({1:3,2:1,3:2,4:5,5:1,6:1,7:2}) –

回答

-1

首先, Python中的dictionary不能有重複鍵, 代碼計算列表中的所有項目。 如果您想知道爲什麼以這種方式看到輸出,那麼也許您應該將print語句從函數中取出,並且在主代碼循環中只有一個打印函數。

1
def list_to_dict(li): 
      dct = {} 
      #loop is running over all item passed. 
      for item in li: 
       dct[item] = dct.get(item,0)+1 
       # .get method "dict.get(key, default=None)" 
       # here default you have provided as 0, means if the 
       # key is present than get will return the value 
       # of that key otherwise 0 
       # 
       # So now if the number is present you will increase the value by 1 
       # otherwise you will assign 1 as the value for the new key found in the array 
       # 
       #look more for .get method of dictionary you will be clear on this 

       print(dct) 
      return dct 

li = [1, 1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 5, 6, 7, 7] 
print(list_to_dict(li)) 
1

輸出的前15行來自循環內部的打印函數(第5行)。這些來自轉換的每個階段。輸出中唯一重要的部分是最後一行{1: 3, 2: 1, 3: 2, 4: 5, 5: 1, 6: 1, 7: 2}。這是該函數的實際輸出。因此,字典中的每個項目都有一個列表中的數字索引以及該數字出現的次數。所以一個簡單的例子將是一個名單[1, 1, 1, 5],它將返回{1:3, 5:1}。部分「1:3」表示數字1出現3次,部分「5:1」表示數字5出現一次。

+0

非常感謝本傑。我現在得到了答案。 – Kumar