如何在Python中实现关联数组(不是字典)?

jon*_*ham 8 python sorting dictionary associative-array

我试图用Python打印出一本字典:

Dictionary = {"Forename":"Paul","Surname":"Dinh"}
for Key,Value in Dictionary.iteritems():
  print Key,"=",Value
Run Code Online (Sandbox Code Playgroud)

尽管首先列出了"Forename"项,但Python中的字典似乎按值排序,因此结果如下:

Surname = Dinh
Forename = Paul
Run Code Online (Sandbox Code Playgroud)

如何在代码中输入相同的顺序或在附加项目时的顺序(不按值或按键排序)?

Joh*_*erg 16

您可以使用元组列表(或列表列表).像这样:

Arr= [("Forename","Paul"),("Surname","Dinh")]
for Key,Value in Arr: 
    print Key,"=",Value

Forename = Paul
Surname = Dinh
Run Code Online (Sandbox Code Playgroud)

你可以用以下方法制作一本字典:

Dictionary=dict(Arr)
Run Code Online (Sandbox Code Playgroud)

正确排序的键如下:

keys = [k for k,v in Arr]
Run Code Online (Sandbox Code Playgroud)

然后这样做:

for k in keys: print k,Dictionary[k]
Run Code Online (Sandbox Code Playgroud)

但我同意你对你的问题的评论:在循环时,按所需顺序排序键是不是很容易?

编辑:(谢谢Rik Poggi),OrderedDict为您做到这一点:

od=collections.OrderedDict(Arr)
for k in od: print k,od[k]
Run Code Online (Sandbox Code Playgroud)

  • 元组列表是如何实现`OrderedDict',如果字典是OP正在寻找的结构,他应该只使用它们并且每次都保存转换的痛苦. (3认同)

lig*_*lig 16

首先,词典根本不是按键分类,也不是按值分类.

并根据您的描述.你实际上需要collections.OrderedDict模块

from collections import OrderedDict

my_dict = OrderedDict([("Forename", "Paul"), ("Surname", "Dinh")])

for key, value in my_dict.iteritems():
    print '%s = %s' % (key, value)
Run Code Online (Sandbox Code Playgroud)

请注意,您需要OrderedDict从不是来自另一个dict的元组列表中实例化,因为dict实例将在OrderedDict实例化之前对项的顺序进行洗牌.

  • 因此,从 Python 3.6 开始,字典保持键的顺序。 (2认同)

str*_*cat 6

你可以用collections.OrderedDict.它在python2.7和python3.2 +中可用.


Fel*_*Yan 5

这可能会更好地满足您的需求:

Dictionary = {"Forename":"Paul","Surname":"Dinh"}
KeyList = ["Forename", "Surname"]
for Key in KeyList:
    print Key,"=",Dictionary[Key]
Run Code Online (Sandbox Code Playgroud)

  • 但大多数时候我似乎不知道按键列表 (2认同)