【问题标题】:Sort list of dictionaries based on nested keys根据嵌套键对字典列表进行排序
【发布时间】:2017-01-15 06:29:20
【问题描述】:
[{'AvailableOffers': (d7b000a:Order {Amount:1000,Name:"000091",OfferedC:"JD",SeekingC:"Taobao",UserName:"xalima",ValidTill:"2019-11-30"}), 'Participants': 2, 'OrderID': ['000089', '000091', '000089']}
 {'AvailableOffers': (d7b000a:Order {Amount:1000,Name:"000091",OfferedC:"JD",SeekingC:"Taobao",UserName:"xalima",ValidTill:"2019-11-30"}), 'Participants': 2, 'OrderID': ['000089', '000091', '000089']}
 {'AvailableOffers': (b222004:Order {Amount:1000,Name:"000093",OfferedC:"JD",SeekingC:"China Airline",UserName:"yunis",ValidTill:"2017-11-11"}), 'Participants': 3, 'OrderID': ['000089', '000093', '000090', '000089']}
 {'AvailableOffers': (d7b000a:Order {Amount:1000,Name:"000091",OfferedC:"JD",SeekingC:"Taobao",UserName:"xalima",ValidTill:"2019-11-30"}), 'Participants': 5, 'OrderID': ['000089', '000091', '000096', '000095', '000090', '000089']}
 {'AvailableOffers': (d7b000a:Order {Amount:1000,Name:"000091",OfferedC:"JD",SeekingC:"Taobao",UserName:"xalima",ValidTill:"2019-11-30"}), 'Participants': 6, 'OrderID': ['000089', '000091', '000096', '000097', '000093', '000090', '000089']}]

那是我要排序的列表字典,我现在能做的就是排序

ListData_by_Participants = sorted(ListData, key=itemgetter("Participants"))

我想得到帮助的是

ListData_by_Validity = sorted(ListData,
                              key=itemgetter("AvailableOffers")("ValidTill")) 

有没有办法解决这个问题?

【问题讨论】:

  • 您的意思是要根据'AvailableOffers'ListData 进行排序,并且对于'AvailableOffers' 具有相同值的元素,您要根据'ValidTill' 进行排序吗?
  • 是的,这就是我想要的
  • (d7b000a:Order{..}) 作为'AvailableOffers' 键的值是什么?它不是 Python 中的有效数据结构
  • 那是从 neo4j 返回的数据是节点标签,这不是问题。问题是排序 {AvailableOffers: {ValidTill: Value }}

标签: python django python-3.x sorting dictionary


【解决方案1】:

为了对 带有嵌套键的字典列表进行排序,您可以使用 lambda 表达式

my_dict_list = [{'parent_key': {'my_key_1': 10, 'my_key_2': 2}},
                {'parent_key': {'my_key_1': 5, 'my_key_2': 4}},
                {'parent_key': {'my_key_1': 10, 'my_key_2': 6}},
                {'parent_key': {'my_key_1': 5, 'my_key_2': 2}},
                {'parent_key': {'my_key_1': 10, 'my_key_2': 3}},
]

sorted(my_dict_list, key=lambda x: (
        x['parent_key']['my_key_1'], x['parent_key']['my_key_2']))
#  value of first 'key' to sort-^                     ^
#               in case of same value for first 'key'-^   
#               sort based on second key -------------^

将排序后的列表返回为:

[{'parent_key': {'my_key_2': 2, 'my_key_1': 5}}, 
 {'parent_key': {'my_key_2': 4, 'my_key_1': 5}}, 
 {'parent_key': {'my_key_2': 2, 'my_key_1': 10}}, 
 {'parent_key': {'my_key_2': 3, 'my_key_1': 10}}, 
 {'parent_key': {'my_key_2': 6, 'my_key_1': 10}}]

【讨论】:

  • my_dict_list = {{anotherkey:{'my_key_1': 10, 'my_key_2': 2}, {'my_key_1': 5, 'my_key_2': 4}, {'my_key_1': 10, ' my_key_2': 6}, {'my_key_1': 5, 'my_key_2': 2}, {'my_key_1': 10, 'my_key_2': 3}, ] 这就是我的字典的风格,我知道我可以按两个键排序价值观?我想要的是对嵌套到另一个键的键进行排序,例如 key=itemgetter((anotherkey)(my_key_1))
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多