[英]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}.")
最后我想用一个人的名字和他或她喜欢去的地方(用逗号分隔)一句话。
我希望我正确地描述了问题。 我只想优化我的代码。 我将不胜感激任何建议。
您缺少的是join
和items
功能。 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.