首页 > 解决方案 > 更快地解决循环和字典问题

问题描述

我最近解决了一个问题,我确信必须有更快的解决方案来解决这个问题。我只是在学习,我想编写高效的代码,所以如果你能给我任何建议会很有帮助。

我想要这个输出(我得到了):

Jozefína likes to go to here: Amsterdam ,Liverpool ,London.
Marek likes to go to here: Košice.
Jozef likes to go to here: Lisabon ,Vancouver.

PS:人物和城市的名字是完全随机的,所以你可以改变它

我解决这个问题的代码是

favourite_places = {
    "Jozefína": ["Amsterdam", "Liverpool", "London"],
    "Marek": ["Košice"],
    "Jozef": ["Lisabon", "Vancouver"]
}


for name in favourite_places:
    line = ""
    for place in favourite_places[name]:
        if len(favourite_places[name]) == 1:
            line = place
        else:
            line += place + " ,"
    if line[-1] == ",":
        line = line[0:-2]
    print(f"{name} likes to go to here: {line}.")

最后,我想要一个带有人名和他或她喜欢去的地方的句子(以逗号分隔)。

我希望我正确地描述了这个问题。我只想优化我的代码。我将不胜感激任何建议。

标签: pythonperformanceloopsdictionary

解决方案


您缺少的是 ajoinitems功能。 join使用指定的分隔符连接所有可迭代项。如果只有 1 项,则不添加分隔符。+用or连接字符串通常被认为是一种不好的做法+=。字符串是不可变的,因此每个连接都会产生一个新字符串,必须为其分配内存。为避免这种情况,您可以首先将字符串的所有部分收集到列表中(您已经将其作为输入),然后加入它们。

items()返回字典的(键,值)的元组。

favourite_places = {
    "Jozefína": ["Amsterdam", "Liverpool", "London"],
    "Marek": ["Košice"],
    "Jozef": ["Lisabon", "Vancouver"]
}


for name, places in favourite_places.items():
    print(f"{name} likes to go to here: {', '.join(places)}.")

推荐阅读