2014-03-26 47 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)