簡體   English   中英

根據鍵值獲取字典列表

[英]Get list of dictionaries based on their key values

我有幾個字典,比如說 5 個:

dict1={'Age': 20, 'Name': 'Bob'}
dict2={'Age': 10, 'Name': 'Ane'}
dict3={'Age': 40, 'Name': 'Lee'}
dict4={'Age': 50, 'Name': 'Rob'}
dict5={'Age': 30, 'Name': 'Sia'}

arr=[50,40,30,20,10]

我可以根據arr中的年齡值獲取字典列表嗎?

所需的 output:

[dict4,dict3,dict5,dict1,dict2]

嘗試使用lambda按某個屬性(在本例中為Age )排序:

代碼:

dict1={'Age': 20, 'Name': 'Bob'}
dict2={'Age': 10, 'Name': 'Ane'}
dict3={'Age': 40, 'Name': 'Lee'}
dict4={'Age': 50, 'Name': 'Rob'}
dict5={'Age': 30, 'Name': 'Sia'}

dicts = [dict1, dict2, dict3, dict4, dict5]

dicts.sort(reverse=True, key=lambda x: x['Age'])

print(dicts)

Output:

[{'Age': 50, 'Name': 'Rob'}, {'Age': 40, 'Name': 'Lee'}, {'Age': 30, 'Name': 'Sia'}, {'Age': 20, 'Name': 'Bob'}, {'Age': 10, 'Name': 'Ane'}]

根據您的評論:

arr = [50, 40, 30, 20, 10]

dicts = [dict1, dict2, dict3, dict4, dict5]

dicts = {d["Age"]: d for d in dicts}
dicts = [dicts[v] for v in arr]
print(dicts)

印刷:

[
    {"Age": 50, "Name": "Rob"},
    {"Age": 40, "Name": "Lee"},
    {"Age": 30, "Name": "Sia"},
    {"Age": 20, "Name": "Bob"},
    {"Age": 10, "Name": "Ane"},
]

如果預期的 output 是 dict 名稱而不是值,則可以在Age和 dict 名稱之間創建映射並遍歷arr並通過其年齡獲取 dict 的名稱:

dict1 = {'Age': 20, 'Name': 'Bob'}
dict2 = {'Age': 10, 'Name': 'Ane'}
dict3 = {'Age': 40, 'Name': 'Lee'}
dict4 = {'Age': 50, 'Name': 'Rob'}
dict5 = {'Age': 30, 'Name': 'Sia'}

arr = [50, 40, 30, 20, 10]

age_to_dict_name = {globals()[x]['Age']: x for x in globals() if x.startswith("dict")}
expected_output = [age_to_dict_name[x] for x in arr]
print(expected_output)  # ['dict4', 'dict3', 'dict5', 'dict1', 'dict2']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM