带有字符串索引的 Python 数组

Posted

技术标签:

【中文标题】带有字符串索引的 Python 数组【英文标题】:Python Array with String Indices 【发布时间】:2011-04-15 11:57:06 【问题描述】:

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

例如:

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

【问题讨论】:

您显示的是列表,而不是数组。叫我迂腐。 【参考方案1】:

您想要的称为associative array。在 python 中,这些被称为dictionaries。

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

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 docs 和 PEP 3106)。

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

如果您想了解 Python 字典的内部结构,我推荐这个约 25 分钟的视频演示:https://www.youtube.com/watch?v=C4Kc8xzcA68。它被称为“强大的字典”。

【讨论】:

很好的例子。关于 Python 中的字典总是有一点值得了解的是,正如 The MYYN 所说,密钥必须是不可变类型。如果您需要使用“多个”键对值进行分类,则必须在 Python 中使用 Tuple 类型。 从技术上讲,键 [必须是 hashable ](docs.python.org/reference/datamodel.html#object.__hash__),不一定是不可变的,尽管 hash 函数返回的值不应该改变,只要该对象用作字典键。如果是这样,请为您的程序以奇怪的方式崩溃或行为不端做好准备。 Above The Mighty Dictionary 网址无效,请在 youtube.com/watch?v=C4Kc8xzcA68 查找 这太棒了。其实我需要什么。【参考方案2】:

更好的是,试试OrderedDict(假设你想要一个列表之类的东西)。比常规 dict 更接近列表,因为键具有顺序,就像列表元素具有顺序一样。使用常规 dict,键具有任意顺序。

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

【讨论】:

请注意,需要 OrderedDict 比需要 dict 少得多。 @MikeGraham,是的,但是有序 dict 的行为更像是 OP 正在寻找的列表。

以上是关于带有字符串索引的 Python 数组的主要内容,如果未能解决你的问题,请参考以下文章

输入带有比较运算符的字符串,并在数组索引上执行比较

从Django中的GET参数中提取带有索引的数组

Python如何用字符串键索引多维数组,如字典

Pandas数据结构之Series

根据索引从数组中删除对象

以索引数组作为键字符串的 jQuery ajax 请求