2014-03-26 83 views
0

這是我的代碼修改值

def increase_by_one(d): 
    for key, value in d.items(): 
     if d[value] == type(int): ## There is an error here 
      d[value] = d[value] + 1 
     else: 
      d[key] += 1 
    return d 

我不知道什麼是錯的。但我確定它是if d[value] == type(int)這是錯誤的。我該如何改變它?

輸入

increase_by_one({'a':{'b':{'c':10}}}) 

輸出

{'a':{'b':{'c':11}}} 

輸入

increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}}) 

輸出

{'1':3.7, '11':17, '111':{'a':6, 't':9}} 
+0

'd [key]'保存值,而不是'd [value]' –

+0

提示:'type(int)== type '和'type(aNumber)== int'。 –

回答

1

從你previous post,這裏是我的答案固定提供解決方案你想:

def increase_by_one(d): 
    for key in d: 
     try: 
      d[key] += 1 
     except TypeError: 
      d[key] = increase_by_one(d[key]) 
    return d 

每次嘗試1添加到字典的時候,一個TypeError提高。既然你知道你在處理嵌套字典,你可以再次調用你的函數。這被稱爲遞歸。

>>> increase_by_one({'a':{'b':{'c':10}}}) 
{'a': {'b': {'c': 11}}} 

>>> increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}}) 
{'1': 3.7, '11': 17, '111': {'a': 6, 't': 9}} 
+0

我沒有被教過:除了TypeError:我可以知道它是如何工作的嗎?並且即使將1添加到值中,但我意識到對於{'first':27,'second':16,'third':8},當我通過函數{'first':28''third ':9,'second':17}被返回並且鍵的順序發生了變化。我可以知道爲什麼嗎? – user3398505

+0

你可以通過閱讀[處理異常]來教你自己(http://docs.python.org/2/tutorial/errors.html#handling-exceptions)。字典是*無序的*數據結構,你不能依賴它們來訂購。如果需要訂購,我們有[collections.OrderedDict](http://docs.python.org/2/library/collections.html#collections.OrderedDict)。 – msvalkon

0

你是按值索引,但既然你已經使用items()你應該使用的關鍵,沒有必要讓從詞典中值:

def increase_by_one(d): 
    for key, value in d.items(): 
     if type(value) == int: 
      d[key] = value + 1 
     else: 
      increase_by_one(value) # if you want recursion 
    return d 
1

首先都使用isinstance()iteritems()

for key, value in d.iteritems(): 

    if isinstance(value,int): 
     ... 

但是當你正在處理嵌套類型的字典這不會做。要麼使用遞歸,要麼你知道字典的深度,首先做一個檢查,如isinstance(value,dict)