【问题标题】:most efficient way to return values of dict in a list on a pre-determine order按预定顺序在列表中返回 dict 值的最有效方法
【发布时间】:2017-04-22 00:31:35
【问题描述】:

假设我有一本这样的字典:

x = {'a':1, 'c':4, 'b':5, 'z':3}

返回预先确定的键顺序的列表(或 numpy 一维数组)的最有效方法是什么。我希望列表按此顺序排列 -> [a,b,c,z] 即

[1, 5, 4, 3]

谢谢!

【问题讨论】:

  • 将键存储在列表中,遍历列表并检索键。例如。 order = ["a", "b", "c", "z"]; items = [x[key] for key in order]
  • @kindall 说得通,谢谢

标签: python list numpy dictionary


【解决方案1】:

这里最好的答案是“隐藏”在 cmets 中:

将键存储在列表中,遍历列表并检索键:

order = ["a", "b", "c", "z"]; items = [x[key] for key in order](kindall提供)

【讨论】:

  • 是的,经过一些非科学的速度运行,这个似乎表现最好
【解决方案2】:

我不知道“最有效的方法”(因为我不知道您要优化什么成本),但这里有一种方法:

x = {'a':1, 'c':4, 'b':5, 'z':3}
y = list(map(x.get, sorted(x)))
print(y)

这是另一种选择:

y = [v for k,v in sorted(x.items())]

【讨论】:

    【解决方案3】:

    有几种方法可以做到这一点。最简单的方法是使用 OrderedDict,您可以阅读有关 here 的信息。

    另一种方法是有一个单独的键列表。您可以遍历该列表,从字典中获取相应的值,并将它们附加到新列表中。这将为您提供所需顺序的值。让我知道你是否想要一个这样的例子。

    (在速度方面,我相信 OrderedDict 会运行得最好,第二个选项是 O(N)。)

    【讨论】:

      【解决方案4】:

      另一种方法,首先对键进行排序,然后检索值。

      In [51]: [x[el] for el in sorted(list(x.keys()))]
      Out[51]: [1, 5, 4, 3]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        相关资源
        最近更新 更多