简体   繁体   English

根据键值获取字典列表

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

I have several dictionaries, let's say 5:我有几个字典,比如说 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'}

and

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

Can I get a list of dictionaries based on the values of age in arr ?我可以根据arr中的年龄值获取字典列表吗?

Desired output:所需的 output:

[dict4,dict3,dict5,dict1,dict2]

Try using a lambda to sort by a certain property (in this case, Age ):尝试使用lambda按某个属性(在本例中为Age )排序:

Code:代码:

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: Output:

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

Based on your comments:根据您的评论:

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)

Prints:印刷:

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

If the expected output is the dict names and not the values, you can create a mapping between Age and the dict name and iterate through arr and get the name of the dict by its age:如果预期的 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