使用字符串命名哈希键?

2024-06-11 07:39:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一本叫做“头先编程”的书,有一部分我很困惑他们为什么要这么做。
文本中似乎没有任何推理,也没有任何解释。你知道吗

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

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


Tags: 数据字符串文本id编辑示例屏幕编程
2条回答

I don't understand why what I think are keys are being named by using a string, when just a few pages prior, they were named like any other variable, without single quotes

答案就在那里。如果没有引号,mydict[s],那么s是一个变量,您可以根据s的值在dict中查找键。你知道吗

如果它是一个字符串,那么你可以从字面上查这个键。你知道吗

因此,在您的示例中s[name]将不起作用,因为它将尝试访问变量name,该变量可能未设置。你知道吗

EDIT: So I tried printing the id key both with and without single quotes around the name, and it worked perfectly fine, either way.

那纯粹是运气。。。有一个名为id的内置函数:

>>> id
<built-in function id>

试试别的名字,你就会发现它不起作用。你知道吗

事实证明,对于字典(Python对散列的术语),有引号和没有引号在语义上是有区别的。你知道吗

例如:

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

用两个键“test”和“othertest”定义一个名为s的字典。但是,如果我尝试这样做:

s = {}
s[test] = 1

我会得到一个namererror异常,因为这将查找一个名为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'作为散列键神奇地排列在一起没有问题。这让我有点担心。你知道吗

相关问题 更多 >