繁体   English   中英

python 根据键名排列的字典元素列表

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM