【问题标题】:Sorting dictionary with tuple keys by specified element of tuple按元组的指定元素对具有元组键的字典进行排序
【发布时间】:2018-03-29 15:08:15
【问题描述】:

我有一个字典列表,字典键是元组,例如:(0,5)

我想按元组[1]的值对列表进行排序。

我尝试使用方法列表排序的 key 参数,但我不知道在 lambda 中放入什么我试试这个: key= lambda k[[1]]

示例输入:[{(5,9): "item"}, {(0,4): "item"}]

预期:[{(0,4): "item"}, {(5,9): "item"}]

谁能解释一下它是如何工作的?

【问题讨论】:

  • 您能否发布示例输入/所需输出/您尝试过的代码
  • 输入: [{(5,9): "item"}, {(0,4): "item"}] 输出: [{(0,4): "item"}, {(5,9): "项目"}]

标签: python python-3.x sorting dictionary


【解决方案1】:

如果你有这样的事情,这里就是解决方案:

a = [{(0,7): 1},
     {(1,5): 2},
     {(4,6): 3}]

sorted(a, key=lambda x: list(x.keys())[0][1])
#[{(1, 5): 2}, {(4, 6): 3}, {(0, 7): 1}]

【讨论】:

  • 我试试你的解决方案,它给了我这个:TypeError: 'dict_keys' object does not support indexing
  • 谢谢。但我不明白你为什么要添加 list() arround key() ?
  • 在我看来,最好使用next(iter(d.keys())) 来提取字典的唯一键。
  • @mg175430 该部分将dict_keys对象转换为支持索引的list对象。
  • @jpp 好主意,确定 +1
【解决方案2】:

对于字典列表,您可以使用:

lst = [{(5,9): "item"}, {(0,4): "item"}]

res = sorted(lst, key=lambda x: next(iter(x))[1])

[{(0, 4): 'item'}, {(5, 9): 'item'}]

术语next(iter(x)) 将字典键转换为迭代器,然后调用第一项。这是因为每个字典只有一个键。

注意,正如@juanpa.arrivillaga 指出的那样,在迭代字典的键时不需要使用x.keys()iter(x) 就足够了。

【讨论】:

    【解决方案3】:

    你可以试试这个方法:

    data=[{(5,9): "item"}, {(0,1): "item"},{(1,4): "item"}]
    
    print(sorted(data,key=lambda x:list(map(lambda y:y[1],x.keys()))[0]))
    

    输出:

    [{(0, 1): 'item'}, {(1, 4): 'item'}, {(5, 9): 'item'}]
    

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多