【问题标题】:How to preserve the item order in a Python dictionary? [closed]如何在 Python 字典中保留项目顺序? [关闭]
【发布时间】:2016-01-31 09:07:15
【问题描述】:

我正在编写一个脚本,其中计算机将与自己进行一场战争游戏。我需要脚本只返回列表中第一个条目的值:

注意:这只是一个例子

    test = {'hey':1, 'hi':2, 'hello':3, 'greetings':4, 'goodmorning':5,   'night':6}

    for a in test:
        print test[a]

    #this returns
    1
    2
    3
    4
    5
    6

我希望这个脚本只返回第一个条目的值。

【问题讨论】:

  • 字典不是有序集合,因为您不按位置(即第 1、第 2 等)访问 ;您可以通过键访问它们(例如test['hey']test['hi'] 等)
  • 您是否也尝试过:print a
  • 您的意思是按照您的示例返回 [1] 吗?

标签: python arrays list dictionary


【解决方案1】:

由于字典是无序的,如果您依赖使用字典,但顺序对您很重要,您应该考虑使用集合中的 OrderedDict。这将根据插入保留字典的顺序。所以,如果你输入a, v, b,就会按照这个顺序。

演示:

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['a'] = 1
>>> d['v'] = 1
>>> d['b'] = 1
>>> d
OrderedDict([('a', 1), ('v', 1), ('b', 1)])

根据要求获取第一个值只获取第一个条目:

d.items()[0][1]

【讨论】:

  • 是的,但我只需要返回条目的值。在这种特殊情况下,该值为 1。
  • @Mezex 是的......看看我的回答......我的例子的最后一行让你明白了。
  • @Mezex - 您可以简单地将其附加到列表中:list1.append(dict_name.values()[0])
  • @Mezex:尝试d.items()[0][1] 获取字典中的第一个元组,然后获取 value 而不是 key
  • 这很好@ray。更容易跟随。我可以用它来更新我的答案。谢谢。
【解决方案2】:

内置字典不是有序集合,因为您不按索引位置(即第 1、第 2 等)访问

相反,您可以通过(例如test['hey']test['hi'] 等)访问它们。例如:

>>> test = { 'hey':1, 'hi':2, 'hello':3 }
>>> test[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 0
>>> test['hi']
2

你应该看看Python docs 使用字典。

如果您想通过位置(即索引)访问元素,那么您应该考虑使用列表或元组。

如果您希望在仍然使用字典的同时保持顺序,您可能希望查看 OrderedDictdocs

引用自文档:

OrderedDict 是一个能够记住键顺序的字典 是先插入的。如果新条目覆盖现有条目,则 原始插入位置保持不变。删除条目和 重新插入会将其移至末尾。

有关使用 OrderedDict 的良好示例,请参阅 idjaw's post

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2019-09-18
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多