我只是想打印字典的键和值,但我得到了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
我不知道为什么会出现这个错误,关键是字符串就像值
答案 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())