您好,如果有人能從下面的代碼中告訴我完成任務的不同方法,我將非常感激(對不起我的語法,仍在學習英語)。我也在尋找更好地撰寫代碼的建議,sorting_dwarfs 函式的想法不是我自己提出的。我仍在嘗試完全了解排序功能的作業原理。謝謝!
這就是任務:
“您將收到幾行輸入,其中包含以下格式的每個矮人的資料:
{dwarf_name} <:> {dwarf_hat_color} <:> {dwarf_physics}
“dwarf_name”和“dwarf_hat_color”是字串。“dwarf_physics”是一個整數。
您必須在程式中存盤有關小矮人的資料。不過有幾個規則:
如果 2 個 dwarfs 名字相同但顏色不同,它們應該被認為是不同的 dwarfs,你應該把它們都存盤起來。
如果 2 個小矮人具有相同的名稱和相同的顏色,則存盤具有更高物理特性的那個。
當您收到命令“從前”時,輸入結束。您必須按物理降序排列小矮人,然后按具有相同帽子顏色的小矮人總數降序排列。
然后,您必須將它們全部列印出來。"
那是代碼:
def collecting_data():
dwarfs_dict = {}
dwarf_info = input()
while True:
if dwarf_info == "Once upon a time":
return dwarfs_dict
dwarf_name, dwarf_hat_color, dwarf_physics = dwarf_info.split(" <:> ")[0], dwarf_info.split(" <:> ")[1],\
int(dwarf_info.split(" <:> ")[2])
if dwarf_hat_color not in dwarfs_dict:
dwarfs_dict[dwarf_hat_color] = {dwarf_name: dwarf_physics}
else:
if dwarf_name not in dwarfs_dict[dwarf_hat_color]:
dwarfs_dict[dwarf_hat_color].update({dwarf_name: dwarf_physics})
else:
if dwarf_physics > dwarfs_dict[dwarf_hat_color][dwarf_name]:
dwarfs_dict[dwarf_hat_color][dwarf_name] = dwarf_physics
dwarf_info = input()
def sorting_dwarfs():
dict_with_dwarfs = collecting_data()
sorted_dwarfs = []
for hat, info in dict_with_dwarfs.items():
for name, physics in info.items():
sorted_dwarfs.append({"number": len(info), "name": name, "physics": physics, "hat": hat})
for dwarf in sorted(sorted_dwarfs, key=lambda x: (-x["physics"], -x["number"])):
print(f"({dwarf['hat']}) {dwarf['name']} <-> {dwarf['physics']}")
sorting_dwarfs()
首先,我嘗試對嵌套字典進行排序,但出現了 unhashbale dict 錯誤,只是想看看它們是否是完成任務的最簡單方法
uj5u.com熱心網友回復:
一些有助于執行代碼的建議:
- 不要使用 dwarf_color 作為字典鍵,而是使用 dwarf_name 和 dwarf_color 作為鍵。
- 同時,為 dwarf_color 實體的數量創建一個單獨的顏色跟蹤器。
- 這將允許您通過簡單地使用 max(dwarf_physics, dwarf_info[dwarf_id]) 來更新 dwarf_physics
- 生成字典后,根據最高物理值和矮顏色對其進行排序。嵌套的 Python 串列按字典順序排序,因此它需要兩個變數。
- 代碼應如下所示:
def collecting_data():
dwarfs_dict, color_tracker = {}, {}
while True:
dwarf_info = input()
if dwarf_info == "Once upon a time":
return dwarfs_dict
dwarf_name, dwarf_hat_color, dwarf_physics = dwarf_info.split(" <:> ")[0],\
dwarf_info.split(" <:> ")[1],\
int(dwarf_info.split(" <:> ")[2])
dwarf_id = f"{dwarf_name} <:> {dwarf_hat_color}"
if dwarf_hat_color not in color_tracker:
color_tracker[dwarf_hat_color] = 1
else:
color_tracker[dwarf_hat_color] = 1
if dwarf_id not in dwarfs_dict:
dwarfs_dict[dwarf_id] = {dwarf_id: (dwarf_physics,
color_tracker[dwarf_hat_color])}
else:
dwarfs_dict[dwarf_id] = {dwarf_id: (max(dwarf_physics,
dwarfs_dict[dwarf_id][0]),
color_tracker[dwarf_hat_color])}
dwarf_info = input()
def sorting_dwarfs():
dict_with_dwarfs = collecting_data()
dwarf_list = list([k, v[0], v[1]] for k,v in dict_with_dwarfs.items())
sorted_dwarfs = sorted(dwarf_list, key=lambda x: [-v[0], -v[1]])
for info in sorted_dwarfs:
print(f"{info[0]} <:> {info[1]}")
sorting_dwarfs()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/526848.html
標籤:Python排序字典
下一篇:如何訪問字典鍵內的串列中的專案?
