【问题标题】:sorting dictionary values with a transformation function使用转换函数对字典值进行排序
【发布时间】:2016-03-03 20:58:53
【问题描述】:

给定以下字典:

a = {'foo': {'n': 'one', 'text': 'bla'},
     'bar': {'n': 'two', 'text': 'blah'},
     'baz': {'n': 'three', 'text': 'blabla'}}

我想要一个按n 中的值排序的结果列表:

['foo', 'bar', 'baz']

鉴于n 中的值是常量且已知的(全部)。所以为了这个例子,只有onetwothreen中允许的值。

我认为这必须是 a.items() 上的 sorted() 与将 one 替换为 1 等的转换 lambda 函数的某种组合,这样排序函数才能真正起作用。但我似乎无法将它串起来使其工作。

【问题讨论】:

  • sorted(a.keys(), lambda x: a[x]['n'])
  • @BhargavRao 你没看第二句话吗?我想将字典中的值 排序到 列表中。您可以对任何值进行排序,这与字典无关。
  • @thkang 这似乎不起作用,而且它会按字母顺序按n 中的值排序。
  • @mart1n 标题不正确。我没有超越标题。现在会读。对不起

标签: python list sorting dictionary


【解决方案1】:

正如您提到的,鉴于 n 中的值是常数且已知,您可以为此使用 mapping_dict。诀窍是您需要在字典中映射给定集合的每个值。因此,一旦您准备好映射器,使用sorted 函数的key 参数,您就可以使用它来映射答案。

>>> a = {'foo': {'n': 'one', 'text': 'bla'},
...      'bar': {'n': 'two', 'text': 'blah'},
...      'baz': {'n': 'three', 'text': 'blabla'}}
>>> mapping_dict = {'one':1,'two':2,'three':3}
>>> sorted(a.keys(),key = lambda x: mapping_dict[a[x]['n']])
['foo', 'bar', 'baz']

【讨论】:

    【解决方案2】:

    我不明白,但是

    a = {'foo': {'n': 'one', 'text': 'bla'},
         'bar': {'n': 'two', 'text': 'blah'},
         'baz': {'n': 'three', 'text': 'blabla'}}
    
    
    order = ['three', 'one', 'two']
    
    r = sorted(a, key=lambda k: order.index(a[k]['n']))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多