【问题标题】:python: sorting蟒蛇:排序
【发布时间】:2010-04-13 14:20:10
【问题描述】:

嗨,我正在做一个循环,所以我可以得到数据的字典,但因为它是一个字典,所以它是 按字母顺序排序,而不是按循环排序...

是否有可能以某种方式关闭字母排序?

我该怎么做

data = {}
for item in container:
  data[item] = {}
  ...
  for key, val in item_container.iteritems():
    ...
    data[item][key] = val

给我这样的东西

data = {
  A : { K1 : V1, K2 : V2, K3 : V3 },
  B : { K1 : V1, K2 : V2, K3 : V3 },
  C : { K1 : V1, K2 : V2, K3 : V3 }
}

我希望它像我正在经历的循环一样,例如

data = {
  B : {K2 : V2, K3 : V3, K1 : V1},
  A : {K1 : V1, K2 : V2, K3 : V3},
  C : {K3 : V3, K1 : V1, K2 : V2}
}

【问题讨论】:

  • 它似乎只是偶然地按字母顺序排列的。如果您向其中添加更多字符串或其他项目,您会发现它根本不是按字母顺序排列的。字典没有可靠的顺序。

标签: python sorting dictionary loops


【解决方案1】:

如果您确实需要使用字典而不是列表,请查看新的OrderedDict(Python 3.1,也即将在 Python 2.7 中提供)。这将保留其项目的添加顺序。

from collections import OrderedDict
data = OrderedDict()
for item in container:
  data[item] = OrderedDict()
  ...
  for key, val in item_container.iteritems():
    ...
    data[item][key] = val

【讨论】:

  • 我建议你添加一个链接到为 Python 2.4 到 2.6 提供 OrderedDict 的包:pypi.python.org/pypi/ordereddict
  • 哦,太好了 - 我不知道。好吧,你已经添加了链接,我要做的不多了:)
【解决方案2】:

您不应该依赖字典中数据的排序顺序;由于它只是键/值对的集合,因此底层实现不保证排序,并且可能会在未来的版本中发生变化。

【讨论】:

【解决方案3】:

您可以使用列表列表,而不是 dicts 的 dict。每个元素都是(键,值)的元组。当然,这意味着您将无法通过键检索元素,但它会保留顺序。我不确定这是否是个好主意,因为我真的不知道您要做什么,但这是一个选择。

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 2010-10-21
    • 2016-05-28
    • 2014-08-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多