【问题标题】:how to sort dictionary keys based on the values inside a list如何根据列表中的值对字典键进行排序
【发布时间】:2016-10-04 00:44:51
【问题描述】:

我有一本字典:

my_dict = {
    'key1': [v1,v2,v3],
    'key2': [v1,v2,v3],
    'key3': [v1,v2,v3]
}

如何根据列表中的v3 项对my_dict 中的键进行排序?v3 是一个浮点值。

我的解决方案: 我创建了一个嵌套列表,

new_list = [[Key1,v3],[key2,v3],[key3,v3]]

然后根据 v3 元素对该列表进行排序。 后来我用了一个for循环:

for each in new_list:
     for i in my_dict:
        if each[0] == i:
           new_orderedDict[i] = my_dict[i]

这样我就得到了使用有序字典的排序键。

有什么最佳方法吗?

【问题讨论】:

  • 你已经尝试了什么?欢迎使用 Stack Overflow,但请注意这不是代码编写服务。相反,您先尝试,然后我们提供帮助。
  • 还有一个基本字典没有排序的问题,所以在my_dict里面排序也没什么意义。
  • @Jenner 对你来说可能没有意义,但我和它有关系
  • @sunilpawar Jenner Felton 的意思是你不能对字典进行排序,因为它们是无序的。如果您使用的是 OrderedDict,请这样说。无论如何,由于您没有表现出任何尝试自己想做的任何努力,也没有屈尊解释 I have something to do with it 的含义,因此您不会得到答案。请edit您的问题并通过对字典进行排序来解释您的意思,并显示您迄今为止尝试过的内容、预期输出、实际输出(如果有)和全文 任何错误或回溯。

标签: python sorting dictionary


【解决方案1】:

首先,我必须指出,由于您是 StackOverflow 的新手,因此您需要尝试解决问题并展示您的尝试。其次,Python 中的dicts 并没有真正的“顺序”——dict 基本上只是一个哈希表。

但是,collections.OrderedDict()(与 sorted() 结合)可以做你想做的事:

返回一个 dict 子类的实例,支持常用的 dict 方法。 OrderedDict 是一个 dict,它记住第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入会将其移至末尾。

这是一个例子:

In [130]: from collections import OrderedDict
Out[130]:
In [131]: OrderedDict(sorted(my_dict.iteritems(), key=lambda (k,v): v[2]))
Out[131]:
OrderedDict([('key3', [0.12, 0.33, 0.971]),
             ('key1', [6.5, 0.7, 2.101]),
             ('key2', [0.1, 1.112, 3.14159])])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 2021-12-29
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多