繁体   English   中英

更快地解决循环和字典问题

[英]Quicker solution to the problem with loops and dictionaries

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

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

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}.")

最后我想用一个人的名字和他或她喜欢去的地方(用逗号分隔)一句话

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

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

items()返回字典的 (key, value) 元组。

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)}.")

我能想到的最简单的方法是这样的:

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

.items()从字典中返回一个 (key, value) 元组列表,这些元组被解构为 name 和 places,然后", ".join(places)将返回一个字符串,该字符串将位置列表中的每个元素分开用逗号,如果只有一个元素,它会自动省略。

尝试使用replace

for name, places in favourite_places.items():  
    print(name + " likes to go to here: " + str(places).replace('[', '').replace("'", "").replace(']', ''))

这里有一些改进:

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM