我有兩個像這樣的字典:
dict1={'key10': {'fail_pass': 1, 'score': 29.5}, 'key20': {'fail_pass': 0, 'score': 37.25}, 'key30': {'fail_pass': 0, 'score': 25.75}, 'key60': {'fail_pass': 1, 'score': 225.75}, 'key70': {'fail_pass': 1, 'score': 25.25}, 'key170': {'fail_pass': 1, 'score': 0.25}}
dict2={'key10': 1, 'key20': 1, 'key60': 1}
我想根據scoredict1對 dict2 進行排序。所以,在這種情況下,我想要回傳 dict2 像這樣訂購:
sorted_dict2={'key60': 1, 'key20': 1, 'key10': 1}
` 我如何實作這一目標?
uj5u.com熱心網友回復:
您可以使用sorted函式對字典進行排序并lambda訪問要排序的引數:
dict1={'key10': {'fail_pass': 1, 'score': 29.5}, 'key20': {'fail_pass': 0, 'score': 37.25}, 'key30': {'fail_pass': 0, 'score': 25.75}, 'key60': {'fail_pass': 1, 'score': 225.75}, 'key70': {'fail_pass': 1, 'score': 25.25}, 'key170': {'fail_pass': 1, 'score': 0.25}}
dict2={'key10': 1, 'key20': 1, 'key60': 1}
sortedDict = dict(sorted(dict2.items(), key=lambda x: dict1[x[0]]['score'], reverse=True))
print(sortedDict)
uj5u.com熱心網友回復:
解決方案很簡單,只需將 custom 傳遞key給 built-in sorted():
dict1 = {'key10': {'fail_pass': 1, 'score': 29.5},
'key20': {'fail_pass': 0, 'score': 37.25},
'key30': {'fail_pass': 0, 'score': 25.75},
'key60': {'fail_pass': 1, 'score': 225.75},
'key70': {'fail_pass': 1, 'score': 25.25},
'key170': {'fail_pass': 1, 'score': 0.25}}
dict2 = {'key10': 1, 'key20': 1, 'key60': 1}
sorted_dict2 = dict(sorted(dict2.items(), key=lambda x: dict1[x[0]]['score'],
reverse=True))
如果您還需要合并兩個字典的值,您可以只對鍵進行排序,然后使用 dict comprehension 創建一個字典:
sorted_dict2 = {key: {"value": dict2[key], **dict1[key]}
for key in sorted(dict2, key=lambda x: dict1[x]['score'],
reverse=True)}
uj5u.com熱心網友回復:
這更多地是關于它如何準確地獲取要排序的值的解釋(在代碼注釋中解釋):
dict1 = {'key10': {'fail_pass': 1, 'score': 29.5}, 'key20': {'fail_pass': 0, 'score': 37.25}, 'key30': {'fail_pass': 0, 'score': 25.75}, 'key60': {'fail_pass': 1, 'score': 225.75}, 'key70': {'fail_pass': 1, 'score': 25.25}, 'key170': {'fail_pass': 1, 'score': 0.25}}
dict2 = {'key10': 1, 'key20': 1, 'key60': 1}
def sorter(key_value_tuple):
# `sorted` calls this function by going over each item
# in `dict2.items()` and passes the item in this case
# a tuple like this: ('key10', 1)
# so here happens a simple tuple unpacking
# `key = 'key10'` and `value = 1`
key, value = key_value_tuple
# access the dictionary in `dict1`, in this example
# `value_in_dict1 = {'fail_pass': 1, 'score': 1}`
value_in_dict1 = dict1[key]
# then get the score part
score = value_in_dict1['score']
# and return the score value `score = 29.5`
# and so for each item in `dict2.items()`
return score
sorted_dict = {k: v for k, v in sorted(dict2.items(), key=sorter, reverse=True)}
# also you seemingly don't need a `dict` so you could just use a list
# sorted_values = sorted(dict2, key=lambda x: dict1[x]['score'], reverse=True)
# print(sorted_values)
print(sorted_dict)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347779.html
