【问题标题】:Order of keys in dictionary字典中键的顺序
【发布时间】:2011-05-21 18:11:52
【问题描述】:

我有一本字典

{'a': 'first', 'b': 'second'}

但是,我需要以不同的顺序使用字典:

{'b': 'second', 'a': 'first'}

最好的方法是什么?

【问题讨论】:

  • 好吧,我的错,我会阅读文档。我只是打印它,它是偶然按特定顺序输出的。我认为这与它的写作方式有关。像php的数组。
  • @Qiao 这其实是个好问题。我就像“哦,这很容易用文档来回答”——事实并非如此。这个“微不足道的事实”似乎在大多数地方都被假定为知识。我能找到的最好的(在 OrderedDict,第 8.3 章中)是“一个 OrderedDict 是一个 dict,它记住了第一次插入键的顺序。”。
  • 啊,就是这样:“最好将字典视为 无序 键:值对的集合,并要求键是唯一的(在一本字典)。”来自5.5 Data Structures in the Tutorial
  • -1。在 StackOverflow 中搜索“python 字典顺序”很容易找到答案。在发布到 StackOverflow 之前,您至少应该尝试 something

标签: python dictionary


【解决方案1】:

字典没有顺序。

您可以获取键,随意排序,然后以这种方式迭代字典值。

keys = myDict.keys()
keys = sorted(keys)  # order them in some way
for k in keys:
   v = myDict[k]

【讨论】:

  • 我想你想要keys.sort()sorted() 返回一个新列表但不修改传递的对象。
【解决方案2】:

字典没有排序。所以没办法。

如果你有python2.7+,你可以使用collections.OrderedDict——在这种情况下你可以使用.items()检索项目列表,然后反转它并从反转的列表中创建一个新的OrderedDict

>>> od = OrderedDict((('a', 'first'), ('b', 'second')))
>>> od
OrderedDict([('a', 'first'), ('b', 'second')])
>>> items = od.items()  # list(od.items()) in Python3
>>> items.reverse()
>>> OrderedDict(items)
OrderedDict([('b', 'second'), ('a', 'first')])

如果您使用的是较旧的 python 版本,您可以从 http://code.activestate.com/recipes/576693/ 获得反向移植

【讨论】:

  • 没错,你的例子中的两个字典是等价的。
  • 排序和排序是不同的东西。 OrderedDict 未排序,无法手动排序,Python 中没有任何数据结构是排序数据结构(即始终自动排序)。
  • 这就是我的意思。为了清楚起见,编辑了我的答案。
  • @Roxy Oxymoron 但是可以从排序列表创建 OrderedDict。问题不是:“我怎样才能创建一个总是排序的字典?”
  • 在 Python 3.4 中不起作用。 line items = od.items() 返回一个 ItemsView 对象,它没有 reverse() 函数。
【解决方案3】:

你不能; dicts 无法排序。如果您需要有序字典,请使用OrderedDict

【讨论】:

  • dict 是可排序的(您始终可以将sorted 应用于它)但不会影响键的默认顺序。
  • 如果键是数字并以增量方式插入会怎样eg:1,2,3,....10。那么在这种情况下,订单被保留了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多