[英]python list of dictionaries elements to be arranged based on the name of the key
我尝试了以下 list_1 以自定义顺序排列(基于键的名称):
示例:每个字典应按相同的键名顺序排列:请参阅“结果”
list_1 = [{"three":3, "two":2, "four":4, "six":6, "five":5, "seven":7, "one":1}, {"six":6, "three":3, "seven":7, "one":1, "two":2, "four":4, "five":5}]
keys_list = ["one", "two", "three", "four", "five", "six", "seven"]
我正在尝试使用自定义顺序将上面的 dict 对象列表放入下面的列表中:
result_list =[{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7}, {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7}]
我可以用下面的代码得到结果:
result_list=[]
result_dict={}
for i in list_1:
for idx, j in enumerate(keys_list):
result_dict[keys_list[idx]] = i[j]
result_list.append(result_dict)
print(result_list)
我们可以通过使用 lambda 函数来改进吗?
这就是您按照您想要的方式对单个字典进行排序的方式
dict(sorted(d.items(), key=lambda x: x[1]))
下面是你如何在一个列表中对它们进行排序
[dict(sorted(d.items(), key=lambda x: x[1])) for d in ls]
我认为最简单的方法是首先创建一个键数组,例如:
key_names = ["one","two","three"...]
然后,您使用list1上的.keys()函数使用每个数组中的键创建一个新变量,例如。 new_var = list1[0].keys() 。 接下来,循环遍历每个键名,替换为它的首选值 (),按升序/降序对新变量进行排序,因为它们现在是数字......
Python 字典并不是要订购的。 为此,您应该使用collections.OrderedDict
。 完整文档在这里: https ://docs.python.org/3/library/collections.html#collections.OrderedDict
然后,您可以使用标准排序算法以您想要的任何方式对您的字典进行排序。
并非对于 python 3.6 及更高版本,字典默认维护插入顺序,即使顺序对您非常重要,OrderedDict 更合适。
result_list=[]
for i in list_1:
result_dict={}
for idx, j in enumerate(keys_list):
result_dict[keys_list[idx]] = i[j]
result_list.append(result_dict)
print(result_list)
我做了一些试错测试,这解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.