一.引入
在对一个结构为
item={A:[{B:[a,b,c]},{C:[d,e,f]},{D:‘h’}]}
字典进行排序时,我陷入了纠结。这是一个字典,A中有三个列表,分别是BCD,B、C又是另外的列表,存储着a、b、c和d、e、f等元素,而D中存放着h字符串,item由不同的A构成。我想根据B列表的长度对item进行降序排列。
二.解决
因为字典里嵌套着列表,列表中又包含着字典,字典中还有列表,如此套娃,把我搞晕了。
在此第一时间就想到了字典的.sorted()函数,它是这么用的:
sorted(可迭代对象,key=函数名,reverse=True/False)
可以先写个雏形:
sorted_result = sorted(item.items(),key=lambda x:x[1],reverse=True)
(1)将item拆解,因为要根据值排序,所以要先取到“值”,这个简单,直接用[1]就能取到所有的值。
(2)取B所在的字典:B是A列表的第一项,根据索引[0]能够定位到B字典。
(3)取B中列表:这个也不难,使用.get(‘B’)即可。
这样就把item拆成了三部分,现在组合起来:
sorted_result = sorted(item.items(),key=lambda x:len(x[1][0].get('B')),reverse=True)
这样就实现了根据B列表长度降序排列。
三.总结
遇到问题不要慌,CSDN把你帮,解决问题过程中参考了大佬的
收获良多, 感谢!