Don't understand, what it means : TypeError: can only concatenate str (not "list") to str

Don't understand, what it means : TypeError: can only concatenate str (not "list") to str

在开始描述问题之前,我需要说明一下,英语不是我的母语,因此,不幸的是,我可能会犯很多错误。感谢理解!

favourite_places = {
    'Paris':['Jake','Carl'],
    'London':'Jake',
    'Moscow':'Fred',
 }

for username,user_info in favourite_places.items():
    
print('======================')
    
print('Place: ' + username)
    
print('Who likes it: ' + user_info)

错误:

Type of error: TypeError: can only concatenate str (not "list") to str

我现在真的不知道该如何解决。当我清除 ['Carl'] 时,程序开始工作,但我需要 ['Carl']。请帮助

您正在尝试打印“谁喜欢它:[杰克,卡尔]”

不出所料,python 不喜欢这样...

试试这个:

favourite_places = {
'Paris':['Jake','Carl'],
'London':['Jake'],
'Moscow':['Fred'],
 }

for username,user_info in favourite_places.items():

    print('======================')

    print('Place: ' + username)
    
    users = ""
    for user in user_info:
        users = users + user + ", "
    users = users[:len(users)-2]   #Ach, sure we'll stick this in too to clean up the last trailing comma & space we don't want

    print('Who likes it: ' + users)

制作所有字典值列表,以便在需要时可以将它们全部连接起来:

favourite_places = {
    'Paris': ['Jake','Carl'],
    'London': ['Jake'],
    'Moscow': ['Fred'],
 }

然后当您需要打印列表时,使用 f 字符串:

print(f'Who likes it: {user_info}')

将您的列表项加入一个字符串:

favourite_places = {
    'Paris':['Jake','Carl'],
    'London':['Jake'],
    'Moscow':['Fred']
 }

for username,user_info in favourite_places.items():
    print('======================')
    print('Place: ' + username)
    print('Who likes it: ' + ', '.join(user_info))

错误语句说明了一切:您只能将 str(而不是“列表”)连接到 str。

应该更改您的字典,以便每个值都是一个列表,以便使用一致的数据。

但是,采用懒惰的方式,您 可以 也可以像下面最后一行那样简单地使用 f-string :

for username,user_info in favourite_places.items():
    print('======================')
    print('Place: ' + username)
    print(f"Who likes it: {user_info}")

输出:

======================
Place: Paris
Who likes it: ['Jake', 'Carl']
======================
Place: London
Who likes it: Jake
======================
Place: Moscow
Who likes it: Fred