使用字符串命名哈希键?

时间:2013-08-23 09:19:05

标签: python string hash

我正在写一本名为“Head First Programming”的书,并且有一个特别的部分让我很困惑为什么他们这样做。
似乎没有任何理由,也没有任何解释在文本中。

问题在于使用多重赋值将字符串中的拆分数据分配到散列(如果你问我,这对于他们使用散列的原因没有意义,但这是一个单独的问题)。这是示例代码:

line = "101;Johnny 'wave-boy' Jones;USA;8.32;Fish;21"
s = {}
(s['id'], s['name'], s['country'], s['average'], s['board'], s['age']) = line.split(";")

我知道这将采用字符串line并将其拆分为每个命名部分,但我不明白为什么我认为键是通过使用字符串命名的,只需几页之前,它们被命名为任何其他变量,没有单引号 将根据单个元素搜索各个部件的用途,然后将其打印在屏幕上。例如,能够按ID号搜索然后返回整个事物。

有问题的语言是Python,如果这有任何区别的话。这对我来说相当混乱,因为我正试图自己学习这些东西 我个人最好的猜测是,它没有任何区别,并且这是作者的一部分个人偏好,但令我感到困惑的是,如果没有任何意义,他们会突然改变形式,并进一步困扰我,他们不要解释一下。

编辑:所以我尝试在名称周围打印带有和不带单引号的id键,无论哪种方式都可以完美地运行。因此,我必须假设这是个人偏好的问题,但我仍然希望从长远来看,实际上知道他们正在做什么以及它是否确实有所作为的人的一些信息。

编辑2:显然,对于我的Python解释器实际上如何处理我所提供的内容没有任何意义,因此我对其进行了屏幕截图https://www.youtube.com/watch?v=52GQJEeSwUA

2 个答案:

答案 0 :(得分:2)

实际上,事实证明,对于词典(Python的哈希术语),在那里使用引号之间存在语义差异。

例如:

s = {}
s['test'] = 1
s['othertest'] = 2

定义一个名为s的字典,其中包含两个键,'test'和'othertest'。但是,如果我尝试这样做:

s = {}
s[test] = 1

我会得到一个NameError异常,因为这会寻找一个名为test的未定义变量,其将用作密钥。

然后,如果我要将它输入Python解释器:

>>> s = {}
>>> s['test'] = 1
>>> s['othertest'] = 2
>>> test = 'othertest'
>>> print s[test]
2
>>> print s['test']
1

你会看到使用test作为没有引号的键使用该变量的值来查找字典中的相关条目。

编辑:现在,真正有趣的问题是为什么使用s [id]给你的预期。关键字“id”实际上是Python中的内置函数,它为作为参数传递的对象提供唯一的id。 Python解释器使用表达式s [id]在世界上做什么对我来说完全是个谜。

编辑2:观看OP的Youtube视频,很明显他在分配和阅读关于使用id或'id'的哈希时保持一致,所以没有问题,函数id作为哈希键以某种方式神奇地排队' id'作为哈希键。这让我有点担心。

答案 1 :(得分:2)

  

我不明白为什么我认为键是通过使用字符串来命名的,当前几页时,它们被命名为任何其他变量,没有单引号

答案就在那里。如果没有引号mydict[s],则s 变量,并根据s的值查找dict中的键。

如果它是一个字符串,那么你直接查找那个键。

因此,在您的示例中,s[name]将无效,因为它会尝试访问可能未设置的变量name

  

编辑:所以我尝试使用和不使用单独打印id键   这个名字引用了它,无论哪种方式都很好。

这只是纯粹的运气......有一个名为id的内置函数:

>>> id
<built-in function id>

尝试其他名称,你会发现它不起作用。

相关问题