【问题标题】:sort dict and put the keys in an array [duplicate]对dict进行排序并将键放入数组中[重复]
【发布时间】:2018-06-14 18:57:12
【问题描述】:

我有一个字典,我想按它们的值排序。之后,我希望将键的顺序放入一个数组中。我尝试了一些代码,但是如果它是按值排序的,那么所有的都只是输出值,或者如果它是按键排序的,则只输出值。 这是我的字典:

{0: 1.0, 1: 22.0, 2: 30.0, 3: 8.0, 4: 17.0, 5: 9.0, 6: 13.0, 7: 21.0, 8: 
24.0, 9: 18.0, 10: 14.0, 11: 2.0, 12: 20.0, 13: 23.0, 14: 19.0, 15: 15.0, 16: 
6.0, 17: 26.0, 18: 11.0, 19: 5.0, 20: 29.0, 21: 7.0, 22: 12.0, 23: 27.0, 24: 
25.0, 25: 16.0, 26: 3.0, 27: 4.0, 28: 28.0, 29: 10.0}

它应该返回如下内容:

[0,11,26,27,19,16, etc]

【问题讨论】:

  • sorted(dictionary, key=dictionary.get) 是您所需要的;它返回 [0, 11, 26, 27, 19, 16, 21, 3, 5, 29, 18, 22, 6, 10, 15, 25, 4, 9, 14, 12, 7, 1, 13, 8, 24, 17, 23, 28, 20, 2] 用于您的示例输入。

标签: python arrays sorting dictionary


【解决方案1】:

给定你的字典d:

result = sorted(d, key=d.get)

sorted(d) 没有key 参数将遍历d 中的键,从中创建一个列表并以自然排序顺序返回。 (它对键进行迭代,因为这是字典的正常迭代。)key 参数允许您传入一个函数,该函数返回一个代理值,以便为每个项目排序。排序后,代理值被丢弃,您只需得到您想要排序的项目。 key=d.get 使用原始字典查找与每个项目关联的值。

【讨论】:

  • 谢谢。这行得通。据我了解, d.get 指的是字典的值?
【解决方案2】:

这可能会有所帮助:

def get_keys_ordered_using_values(data):
    return list(map(lambda y: y[0], sorted(data.items(), key=lambda x: x[1])))

my_data = {0: 1.0, 1: 22.0, 2: 30.0, 3: 8.0, 4: 17.0, 5: 9.0, 6: 13.0, 7: 21.0, 
           8: 24.0, 9: 18.0, 10: 14.0, 11: 2.0, 12: 20.0, 13: 23.0, 14: 19.0, 15: 15.0, 
        16: 6.0, 17: 26.0, 18: 11.0, 19: 5.0, 20: 29.0, 21: 7.0, 22: 12.0, 23: 27.0, 
        24: 25.0, 25: 16.0, 26: 3.0, 27: 4.0, 28: 28.0, 29: 10.0}

print(get_keys_ordered_using_values(my_data))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多