【问题标题】:Sort list of dictionaries based on values where keys have different names根据键具有不同名称的值对字典列表进行排序
【发布时间】:2018-01-08 19:24:11
【问题描述】:

我有一个字典列表,如下所示:

my_list = [
          {'1200' : [10, 'A']},
          {'1000' : [24, 'C']},
          {'9564' : [6, 'D']},
          ]

列表中的所有字典都有一个键值对。

我想根据每个字典值的第一个元素(这是一个列表)对其进行排序,因此排序后的列表如下所示:

my_list_sorted = [
          {'9564' : [6, 'D']},
          {'1200' : [10, 'A']},
          {'1000' : [24, 'C']},
          ]

如您所见,键的名称不同,这就是为什么我不能使用以下帖子中的答案:How do I sort a list of dictionaries by a value of the dictionary?

【问题讨论】:

  • 你所有的字典都只有一个键值对吗?
  • 我不认为这是对那个问题的欺骗,因为正如 OP 所说,键是不同的。
  • @schwobaseggl,情况看起来不同,尽管它问的是同一个问题。没有共同的钥匙。
  • @schwobaseggl 这是一个完全不同的问题,正如我在文中所描述的那样。我也更新了标题。

标签: python sorting dictionary


【解决方案1】:
sorted(my_list,key=lambda x: list(x.values())[0][0])
Out[114]: [{'9564': [6, 'D']}, {'1200': [10, 'A']}, {'1000': [24, 'C']}]

【讨论】:

    【解决方案2】:

    您可以使用values() 访问dict 元素:

    sorted(my_list, key=lambda x: x.values()[0][0])
    

    输出:

    [
      {'9564': [6, 'D']},
      {'1200': [10, 'A']},
      {'1000': [24, 'C']}
    ]
    

    这假定每个条目都包含一个包含至少一个元素的列表。

    为 Python 3 编辑

    正如@cᴏʟᴅsᴘᴇᴇᴅ 指出的那样,values() 不会在 python3 中返回列表,因此您必须这样做:

    sorted(my_list, key=lambda x: list(x.values()[0])[0])
    

    【讨论】:

    • x.values()[0] 为您提供整个列表,他们只想按第一个元素排序。
    • 你说得对。过早的剪切和粘贴-感谢您指出这一点。现在已经修好了。
    • 另外,请注意 x.values()[0][0] 不适用于 python3,因为 .values() 不会在那里返回列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多