保持元素有序

2024-04-24 03:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我正在尝试dicts,你知道的问题是dicts中的顺序没有保持,所以我使用orderedicts来执行这个问题,但是我没有成功。你知道吗

这就是我正在尝试的口述:

numbersDictionary = OrderedDict({ 
      "0":{ (0,1),(1,0),(1,2),(2,1),(2,2),(2,3) },
      "1":{ (1,2),(2,3) },
      "2":{ (0,1),(1,1),(1,2),(2,1),(2,1),(2,2) },
      "3":{ (0,1),(1,1),(1,2),(2,2),(2,3) },
      "4":{ (1,0),(1,1),(1,2),(2,3) },
      "5":{ (0,1),(1,0),(1,1),(2,2),(2,3) },
      "6":{ (0,1),(1,0),(1,1),(2,1),(2,2),(2,3) },
      "7":{ (0,1),(1,2),(2,3) },
      "8":{ (0,1),(1,0),(1,1),(1,2),(2,1),(2,2),(2,3) },
      "9":{ (0,1),(1,0),(1,1),(1,2),(2,2),(2,3) }
    });

所以当我这样做的时候:

print(numbersDictionary.get("5"))

输出:

{(0, 1), (2, 3), (2, 2), (1, 0), (1, 1)}

如何建立数据的dict以获得正确的order元素?你知道吗


Tags: 数据元素get顺序orderdictordereddictprint
3条回答

问题不在于OrderedDict本身,而是使用集合作为字典值。集合是无序的。使用列表代替。你知道吗

这是一个set

{ (1,2),(2,3) }

这是一个list

[ (1,2),(2,3) ]

OrderedDict保持键的顺序,而不是值的顺序。在这里,您需要对值进行排序,以便list是正确的数据结构。你知道吗

>>> numbersDictionary = { 
  "0": [ (0,1),(1,0),(1,2),(2,1),(2,2),(2,3) ],
  "1": [ (1,2),(2,3) ],
  "2": [ (0,1),(1,1),(1,2),(2,1),(2,1),(2,2) ],
  "3": [ (0,1),(1,1),(1,2),(2,2),(2,3) ],
  "4": [ (1,0),(1,1),(1,2),(2,3) ],
  "5": [ (0,1),(1,0),(1,1),(2,2),(2,3) ],
  "6": [ (0,1),(1,0),(1,1),(2,1),(2,2),(2,3) ],
  "7": [ (0,1),(1,2),(2,3) ],
  "8": [ (0,1),(1,0),(1,1),(1,2),(2,1),(2,2),(2,3) ],
  "9": [ (0,1),(1,0),(1,1),(1,2),(2,2),(2,3) ]
}

>>> numbersDictionary["5"]
>>> [(0, 1), (1, 0), (1, 1), (2, 2), (2, 3)]

你首先使用了错误的数据类型。您的键实际上是索引的字符串表示;这就是列表的用途!使用列表存储此数据。你知道吗

至于集合,您最可能的目标是在这里使用列表,以及列表保留顺序而集合不保留顺序,它们是“唯一元素的无序集合”。你知道吗

下面是我的意思的一个例子:

numbers = [
      [(0,1),(1,0),(1,2),(2,1),(2,2),(2,3)]
      [(1,2),(2,3)],
      [(0,1),(1,1),(1,2),(2,1),(2,1),(2,2)],
      [(0,1),(1,1),(1,2),(2,2),(2,3)],
      [(1,0),(1,1),(1,2),(2,3)],
      [(0,1),(1,0),(1,1),(2,2),(2,3)],
      [(0,1),(1,0),(1,1),(2,1),(2,2),(2,3)],
      [(0,1),(1,2),(2,3)],
      [(0,1),(1,0),(1,1),(1,2),(2,1),(2,2),(2,3)],
      [(0,1),(1,0),(1,1),(1,2),(2,2),(2,3)]
]

通过这种方式存储数据,您可以使用子列表的索引作为int来访问子列表

>>> numbers[5]
>>> [(0, 1), (1, 0), (1, 1), (2, 2), (2, 3)]

相关问题 更多 >