这两个与嵌套在字典中的列表有关的代码有什么区别?

时间:2019-02-13 17:38:17

标签: python

我正在通过阅读“ Python速成课程”这本书来学习python,所以我还是一个初学者,我想知道的是这两段代码之间的区别,因为它们对我来说似乎都是相同的,但是结果不同。

names={
    'first' : ['john','mike'],
}
for name in names.keys():
    print(name[1])

这将给出结果“ i”。

names={
    'first' : ['john','mike'],
}
for name in names.keys():
    print(names[name][1])

这给出了我预期的结果; '麦克风'。 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:0)

尝试理解此示例:

>>> names = {'first': ['john', 'mike']}
>>> for key in names.keys():
...     print(f'Current key is "{key}"')
...     print(f'Second element of "{key}" is "{key[1]}"')
...     print(f'Value of key "{key}" is "{names[key]}"')
...     print(f'Second element of "{names[key]}" is "{names[key][1]}"')
...     
Current key is "first"
Second element of "first" is "i"
Value of key "first" is "['john', 'mike']"
Second element of "['john', 'mike']" is "mike"

答案 1 :(得分:0)

在两种情况下,name均指names中的(唯一)键,字符串'first'

在第一个循环中,打印'first'[1],即'i'

在第二个循环中,使用名称从names获取值; names[name] == ['john', 'mike'],所以names[name][1]['john', 'mike'][1] == 'mike'

答案 2 :(得分:0)

names.keys()将返回names词典的所有键。因此,唯一的密钥就是:first

for name in names.keys()将一个接一个地浏览键,在这种情况下,它只会观察上面的单个键。

因此... name在这里存储值"first"

"first"[1]将返回'i',而names['first']将返回['john','mike'],因此names['first'][1]将返回"mike"(该列表的第二个元素)

答案 3 :(得分:0)

names={
    'first' : ['john','mike'],
}
for name in names.keys():
    print(name[1])

第一个names是使用键而不是索引的字典。在此示例中,字典的“键”为first。让我们看一下字典:

>>> names
{'first': ['john', 'mike']}

我们可以看到有一个键first,并且该键具有一个list作为值。该列表有两个项目johnmike

进行for循环时,将迭代字典中的每个项目。具体而言,您要遍历密钥。在此示例中,只有一个键:first

可能使您感到困惑的一件事是您正在使用变量name。为了示例,我们将其更改为i

for i in names.keys():
    print(i)

这将返回first,因为那是字典中的唯一键。您可以将i替换为(几乎)所需的任何变量名。

因此,我们有一个值为first的str,并且希望该字符串中的第二个字符。请记住,python从0开始,所以[1]是字符串first的第二个字符,即i

现在,在第二个代码块中,您有names[name][1]]。请记住,names字典的值为{'first': ['john', 'mike']}。再次,让我们将单词name更改为i,以查看发生了什么事:

for i in names.keys():
    print(names[i][1])

同样,我们唯一的键是first,所以当for循环迭代时,它将变为i == first,然后结束。让我们尝试一下:

>>> names['first']
['john', 'mike']

这将返回两个名称的列表。如果我们使用>>> names['first'][1]来获取列表的第一个值,则会得到mike

因此,总而言之,在第一个示例中,您将获取键的一部分,即str,在第二个示例中,您将返回给定键的字典值的第一个元素。

答案 4 :(得分:0)

调用names.keys()时,该函数将返回一个列表,其中包含字典中的所有键。运行循环时,name将成为列表的元素,在这种情况下为字符串"first"。因此,当您调用name[1]时,与调用"first"[1]相同,后者将返回字符串的第二个字符:“ i”。

在第二个代码中,调用names[name]与调用names["first"]相同,后者返回一个列表(['john','mike']),然后可以打印列表的第二个元素("mike"