带字符串索引的Python数组


74

是否可以在Python数组中使用字符串作为索引?

例如:

myArray = []
myArray["john"] = "johns value"
myArray["jeff"] = "jeffs value"
print myArray["john"]

9
您显示的是列表,而不是数组。叫我学究。
aaronasterling

Answers:


156

您想要的称为关联数组。在python中,这些被称为字典

词典有时在其他语言中被称为“关联记忆”或“关联数组”。与用数字范围索引的序列不同,字典是用键索引的,键可以是任何不可变的类型;字符串和数字始终可以是键。

myDict = {}
myDict["john"] = "johns value"
myDict["jeff"] = "jeffs value"

创建上述字典的另一种方法:

myDict = {"john": "johns value", "jeff": "jeffs value"}

访问值:

print(myDict["jeff"]) # => "jeffs value"

获取密钥(在Python v2中):

print(myDict.keys()) # => ["john", "jeff"]

在Python 3中,您将获得dict_keys,它是一个视图,效率更高(有关详细信息,请参见views docsPEP 3106)。

print(myDict.keys()) # => dict_keys(['john', 'jeff']) 

如果您想了解python词典的内部知识,我建议您观看此约25分钟的视频演示:https : //www.youtube.com/watch?v=C4Kc8xzcA68。它被称为“强大的字典”。


4
很好的例子。关于Python中的字典,总有一件好事是,正如MYYN所说,密钥必须是不可变的类型。如果您需要使用“多个”键对值进行分类,则必须在Python中使用Tuple类型。
肖恩2010年

1
从技术上讲,键[必须是可散列的](docs.python.org/reference/datamodel.html#object.__hash__),不一定是不可变的,尽管hash只要将对象用作字典键。如果是这样,请为您的程序做好准备,使其以异常的方式崩溃或行为异常。
David Z

以上强大的字典网址无效,请访问youtube.com/watch?v=C4Kc8xzcA68
Mallikarjunarao Kosuri

这太棒了。其实我需要什么。
Faris Rayhan

4

更好的是,尝试使用OrderedDict(假设您想要类似列表的内容)。比起常规字典,列表更接近列表,因为键具有顺序,就像列表元素具有顺序一样。对于常规字典,键具有任意顺序。

请注意,这在Python 3和2.7中可用。如果要与Python的早期版本一起使用,则可以找到可安装的模块来执行此操作。


注意,需要OrderedDict比需要dict少得多。
Mike Graham
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.