python - 更快地解决循环和字典问题
问题描述
我最近解决了一个问题,我确信必须有更快的解决方案来解决这个问题。我只是在学习,我想编写高效的代码,所以如果你能给我任何建议会很有帮助。
我想要这个输出(我得到了):
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}.")
最后,我想要一个带有人名和他或她喜欢去的地方的句子(以逗号分隔)。
我希望我正确地描述了这个问题。我只想优化我的代码。我将不胜感激任何建议。
解决方案
您缺少的是 ajoin
和items
功能。
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)}.")
推荐阅读
- android - 如何让滑动标签在 Android 开发中变得可点击?
- c# - 经验计算
- android - ListView.SetOnItemClickListener 不起作用
- java - Thymeleaf 自定义方言不起作用
- coldfusion - 如何以无缝、增量的方式将 Web 应用程序迁移到另一种技术
- android - 谷歌奖励视频加载失败
- c# - 访问 Xamarin 窗体中的控件内的控件
- vue.js - VUE2js:如何在其道具更改后重新渲染组件?
- java - 同时迭代和修改java队列
- c# - #if DEBUG 和 Conditional(“DEBUG”) 在发布版本中调用