带有字符串索引的 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 数组的主要内容,如果未能解决你的问题,请参考以下文章