【问题标题】:Sort Dictionary which contains list of dictionaries by value按值对包含字典列表的字典进行排序
【发布时间】:2019-05-23 13:06:43
【问题描述】:

我有一本格式如下的字典:

{"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}

所以基本上它是一个包含字典列表作为值的字典。

我想按百分比字段降序排序 - 所以通过上面的例子我想获得:

{"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla bla", "percentage": "0.987"},{"title":"bla bla", "percentage":"0.635"}]}

我还想获得最高百分比的全局视图。例如:

  1. "key2" : {"title":"bla bla bla", "percentage": "0.987"}

  2. "key2" : {"title":"bla bla", "percentage": "0.635"}

  3. "key1" : {"title":"bla bla", "percentage": "0.3493"}

  4. "key1" : {"title":"bla bla bla", "percentage":"0.293"}

我研究了 Python 中的各种排序方式,但我仍然不确定如何实现这一点。

【问题讨论】:

    标签: python list sorting dictionary


    【解决方案1】:

    我们按照键percentage的值对字典中每个键的值列表进行降序排序,然后我们使用字典推导重新创建字典

    dct = {"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
    "key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}
    
    result = {key: sorted(value, key=lambda x:x['percentage'], reverse=True) for key, value in dct.items()}
    print(result)
    

    输出将是

    {'key1': [{'title': 'bla bla', 'percentage': '0.3493'}, 
    {'title': 'bla bla bla', 'percentage': '0.293'}], 
    'key2': [{'title': 'bla bla bla', 'percentage': '0.987'}, 
    {'title': 'bla bla', 'percentage': '0.635'}]}
    

    对于全局视图,我们首先更新内部字典,以便在那里出现key 属性。 然后,我们通过合并所有值列表来创建值的整体列表(全局视图),然后按百分比按降序对它们进行排序

    dct = {"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
    "key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}
    
    #Update inner dictionaries with the name of the key for each dictionary
    for key, value in dct.items():
        for v in value:
            v.update({'key':key})
    
    global_view = sorted([v for value in dct.values() for v in value], key=lambda x:x['percentage'], reverse=True)
    
    print(global_view)
    

    这里的输出将是

    [
    {'title': 'bla bla bla', 'percentage': '0.987', 'key': 'key2'}, 
    {'title': 'bla bla', 'percentage': '0.635', 'key': 'key2'}, 
    {'title': 'bla bla', 'percentage': '0.3493', 'key': 'key1'}, 
    {'title': 'bla bla bla', 'percentage': '0.293', 'key': 'key1'}
    ]
    
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2010-11-15
      • 1970-01-01
      • 2021-10-31
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多