【发布时间】:2018-05-21 13:50:06
【问题描述】:
提前道歉,我不愿意问这样一个新手问题(这是我正在学习的第一门语言),但我的理解显然存在差距,我找不到任何解决问题的内容的链接我正在经历。
下面的代码定义了 3 个字典和一个空列表。然后我运行一个 for 循环,用 30 个“慢速外星人”填充列表。
然后我对列表中的前 10 个条目运行另一个循环,以便将该特定实例更新为“Fast Alien”字典。但是,我似乎要替换列表中的所有字典。
如果有任何帮助将我指向一些进一步讨论/解决/教育我的文章,我们将不胜感激。
slow_alien = {
"Name": "Slow Alien",
"Colour": "Green",
"Points": 10,
"X Position": 15,
"Y Position": 20,
"Current Speed": "Slow",
"Height": 1.8,
}
medium_alien = {
"Name": "Medium Alien",
"Colour": "Yellow",
"Points": 15,
"X Position": 30,
"Y Position": 20,
"Current Speed": "Medium",
"Height": 2.2,
}
fast_alien = {
"Name": "Fast Alien",
"Colour": "Red",
"Points": 20,
"X Position": 45,
"Y Position": 20,
"Current Speed": "Fast",
"Height": 2.6,
}
aliens = []
for alien in range(30):
aliens.append(slow_alien)
for alien in aliens[:10]:
if alien == slow_alien:
alien.update(fast_alien)
for alien in aliens:
for key, value in alien.items():
print(str(key) + ": " + str(value))
print("")
print("The aliens list contains " + str(len(aliens)) + " dictionaries")
谢谢,
卡尔。
【问题讨论】:
-
另见stackoverflow.com/questions/240178/… 这不是完全相同的问题,但最终结果是相同的:包含对同一对象的多个引用的列表。
-
如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。有关完整说明,请参阅here。
-
谁说他们需要 30 份外星字典?如果他们真的只想要 10 个对单个“常量”
fast_alien的引用和 20 个对单个“常量”slow_alien的引用怎么办? IMO 的问题是他们误将dict.update方法用于替换列表中的条目。替换列表中的项目的正确方法是使用aliens[i] = fast_alien重新分配它(并且可能使用enumerate来获取索引)。 -
在这种情况下,问题将与 stackoverflow.com/questions/2582138/… 重复。
-
@PM2Ring,谢谢,已检查答案。
标签: python for-loop indexing slice