不能连接' str'和'元组'字典上的对象

时间:2016-12-21 00:52:53

标签: python dictionary typeerror

我只是想打印字典的键和值,但我得到了TypeError。 代码:

def __str__(self):
    string = ""
    for key in self.dictionary:
        string += key, "-->", self.dictionary[key] + '\n'
    return string

我添加了密钥'密钥'和价值',字典的内容是正确的:

{'key': 'value'}

然后我尝试调用str方法并得到它:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "dictionary.py", line 37, in list
    print self.__str__()
  File "dictionary.py", line 42, in __str__
    string += key, "-->", self.dictionary[key] + '\n' 
TypeError: cannot concatenate 'str' and 'tuple' objects

我不知道为什么会出现这个错误,关键是字符串就像值

4 个答案:

答案 0 :(得分:7)

这一行是问题所在:

string += key, "-->", self.dictionary[key] + '\n'

k,箭头和值之间的逗号将它组成一个元组。

尝试将其更改为

string += key + "-->" + str(self.dictionary[key]) + '\n'

(如果您的密钥不是字符串,则可能需要将密钥包装为str(key)。)

你可以写得更清洁:

string += "%s-->%s\n" % (key, self.dictionary[key])

答案 1 :(得分:5)

您实际上是在尝试使用此行上的字符串连接元组(请注意逗号):

string += key, "-->", self.dictionary[key] + '\n'

我认为您的意思是简单地将密钥与-->连接起来,并使用值和换行符:

string += key + "-->" + self.dictionary[key] + '\n'

答案 2 :(得分:5)

使用format对象的String方法:

def __str__(self):
    string = ""
    for key in self.dictionary:
        string = "{}{}-->{}\n".format(string, key, self.dictionary[key])
    return string

答案 3 :(得分:0)

问题在于字符串格式行中的,

你有这个

string += key, "-->", self.dictionary[key] + '\n'

什么时候应该是这个

string += key + "-->" + self.dictionary[key] + '\n'

这就是你现在所拥有的:

def __str__(self):
    string = ""
    for key in self.dictionary:
        string += key + "-->" + self.dictionary[key] + '\n'
    return string

做同样事情的简单方法:

def __str__(self):
    return ''.join(['{}-->{}\n'.format(x, y) for x, y in self.dictionary.items()])

与上述相同但使用C字符串:

def __str__(self):
    return ''.join(["%s-->%s\n" % (x, y) for x, y in self.dictionary.items()]

使用lambda的一个班轮:

def __str__(self):
    return ''.join(map(lambda x: '{}-->{}\n'.format(x[0], x[1]), self.dictionary.items()))

与上述相同但使用C字符串:

def __str__(self):
    return ''.join(map(lambda x: "%s-->%s\n" % (x[0], x[1]), self.dictionary.items())