[英]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.