有誰知道如何修改此代碼以便對字典{}和串列[]進行排序?
示例排序:
Input: {'a': 1, 'c': 3, 'b': {'b2': 2, 'b1': [1, 7, 4, 2]}}
Output: {'a': 1, 'b': {'b1': [1, 2, 4, 7], 'b2': 2}, 'c': 3}
原始代碼:
def sort_dict(item: dict):
return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}
感謝@gyli 的精彩代碼 https://gist.github.com/gyli/f60f0374defc383aa098d44cfbd318eb
這是我最好的兩次嘗試,但都失敗了。在這次嘗試中,我可以看到 v[] 得到排序,但排序串列沒有進入計算回傳值的下一行。
def sort_dict(item: dict):
for k, v in sorted(item.items()):
v = sorted(v) if isinstance(v, list) else v
return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}
這里發生了同樣的問題,但至少在這次嘗試中,我理解了為什么排序串列沒有進入 return 陳述句。
def sort_dict(item: dict):
return {k: sort_dict(v) if isinstance(v, dict) else sort_list(v) for k, v in sorted(item.items())}
def sort_list(item):
item = sorted(item) if isinstance(item, list) else item
uj5u.com熱心網友回復:
嗚呼!我想通了:DI以前是如此接近!天哪,這令人興奮
def sort_dict(item: dict):
for k, v in sorted(item.items()):
item[k] = sorted(v) if isinstance(v, list) else v
return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}
uj5u.com熱心網友回復:
您的第二個答案幾乎接近正確答案,除了函式的省略回傳值sort_list。只需將其修改為
def sort_list(item):
return sorted(item) if isinstance(item, list) else item
此外,你可以嘗試在不同的條件下為這個遞回構造一個新的函式,這樣更清晰,更容易修改,例如如果你想添加一個字串排序功能
def sort_dict_core(item):
if isinstance(item, dict):
return {k: sort_dict_core(v) for k, v in sorted(item.items())}
elif isinstance(item, list):
return sorted(item)
elif isinstance(item, str):
return sorted(item)
else:
return item
def sort_dict(item: dict):
return {k: sort_dict_core(v)for k, v in sorted(item.items())}
uj5u.com熱心網友回復:
這是另一個想法;不是最好的,但作業:)
def full_sort(d):
if type(d) == type({}):
return {k: full_sort(v) for (k, v) in sorted(d.items())}
elif type(d) == type([]):
return sorted(d)
return d
輸出:
{'a': 1, 'b': {'b1': [1, 2, 4, 7], 'b2': 2}, 'c': 3}
也是一個緊湊的不可讀版本:
def fs(d): return {k: fs(v) for (k, v) in sorted(d.items())} if type(
d) == type({}) else sorted(d) if type(d) == type([]) else d
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529479.html
標籤:Python排序字典
