一旦我将另一个值附加到字典中,它就会更新花名册。不出所料。然而,一旦我尝试输出排序后的花名册,它不会更新吗?我该如何解决这个问题?
我试过:
roster = [
{"jersey_number": player_1, "rating": rating_1},
{"jersey_number": player_2, "rating": rating_2},
{"jersey_number": player_3, "rating": rating_3},
{"jersey_number": player_4, "rating": rating_4},
{"jersey_number": player_5, "rating": rating_5},
]
print("ROSTER")
sorted_roster = sorted(roster, key=lambda x: x["jersey_number"])
for player in sorted_roster:
print("Jersey number: {}, Rating: {}".format(player["jersey_number"], player["rating"]))
然后:
elif choice == "a":
jersey_number = int(input("Enter Jersey number:\n"))
rating = int(input("Enter rating:\n"))
newplayer = {"jersey_number": jersey_number, "rating": rating}
roster.append(newplayer)
print("new player added")
但是有一次我要求电脑输出更新后的花名册:
elif choice == "o":
# Output roster
print("ROSTER")
for player in sorted_roster:
print("Jersey number: {}, Rating: {}".format(player["jersey_number"], player["rating"]))
我得到了相同的原始花名册,但没有附加值。 我怎样才能让 sorted_roster_ 更新并保持排序。它不应该自动更新,因为它基于变量(花名册)吗?
对不起,我显然是编程本身的新手,并且已经在这件事上停留了很长一段时间。
尝试使
sorted_roster
成为一个函数:
def sorted_roster():
return sorted(roster, key=lambda x: x["jersey_number"])
for player in sorted_roster():
print("Jersey number: {}, Rating: {}".format(player["jersey_number"], player["rating"]))
如果将其设为函数,则每次使用
()
运算符调用它时,都会评估函数的主体并重新构建列表。 (请注意,这远非最 efficient 的方法,但现在重要的是了解通过函数调用动态构建的数据与分配给变量的静态数据之间的区别。)
如果你只调用一次
sorted()
并将它的结果赋给一个变量,你只会得到sorted()
第一次返回的列表;每次访问结果时,原始函数都不会自动再次调用。