python 中 for 循环模式下字典键值的矛盾输出

Contradictory outputs in dictionary key value in for-loop mode in python

要理解收缩(在结尾段落中)首先你需要用鹰眼仔细观察这四种情况:
(如果发现任何愚蠢的错误请忽略,了解问题的内容)

第一名:

r={'A':'aa','B':'bb','C':'cc'}
print(r[A])#this gives error as "A" in not inside Quotation marks

第二名:

r={'A':'aa','B':'bb','C':'cc'}
print(r['A'])   #now there is no error in output result

第三:

r={'A':'aa','B':'bb','C':'cc'}
for xyz in r:
    print(r[A])   # again there will be error in output result 
                  # because "A" is not inside quotation marks.

第四名:

r={'A':'aa','B':'bb','C':'cc'}
for xyz in r:
    print(r['A'])   #not no error will be there as "A" is inside  
                    #quotation marks

矛盾从这里开始循环

第五名:

 r={'A':'aa','B':'bb','C':'cc'}
 for xyz in r:
     print(xyz)       #output result come as A C B with no quotation 
                           mark, you can check to see

第六名:

 r={'A':'aa','B':'bb','C':'cc'}
 for xyz in r:
     print(r[A])    # shows error in output as "A" is not inside  
                        # quotation marks

第七名:

 r={'A':'aa','B':'bb','C':'cc'}
 for xyz in r:
     print(r['A'])  #result comes out successfully as aa aa aa with new 
                         line inbetween

第八名:

r={'A':'aa','B':'bb','C':'cc'}
for xyz in r:
    print(r['xyz']) #result should come successfully as r['xyz'] means  
                          r['A'] or r['B'] or r['C'] in the loop
                         #but it shows error which by omitting the quotation      
                          mark of xyz show the result successful as shown in
                          9th scenario

第九名:

r={'A':'aa','B':'bb','C':'cc'}
for xyz in r:
    print(r[xyz])   #output result comes successfully as aa cc bb 
                             (check to see)

自相矛盾:在第9种情况下,字面意思是print(r[xyz]),xyz两边没有引号,意思是print(r[A]) or print(r[B]) or print(r[C]) 表示成功输出结果,而在第 8 种情况下 print(r['xyz']) 在其输出结果中显示错误。 现在这是矛盾的:

现在我的问题是引号还是不带引号??是有一个通用规则还是不止一个规则??

xyz 是对象的名称(或标签)。循环将名称 xyz 指向字典中的每个键。所以用xyz作为key就可以了,因为它的值其实是'A',然后是'B',然后是'C'.

'xyz' 是用作字典键的字符串。 字典没有键 'xyz' 所以失败了。

A 是一个未绑定的名称。它没有被定义为指向任何对象。当你说 r[A] 时,口译员不知道你在说什么。它知道名字 r 是什么;它指向一个字典对象。但是 A 是未知的。

'A' 是一个字符串。字典中有键 'A',因此匹配且不会失败。

编辑:

在你说的问题中:

r['xyz'] means r['A'] or r['B'] or r['C'] in the loop

这不是真的。

每循环一次,r['xyz']表示r['xyz']

这对字典说:

"do you have a key with value 'xyz'?

字典查看它的键,即 'A''B''C',然后说:

"no, there is no key 'xyz'"

第 9 和第 8 种情况与之前的 ones.In python 不矛盾,当您声明如下的 for 语句时

mylist = ["a", "b", "c"]
for each in mylist:
    print(each)

在这条语句中print语句执行了3次。首先 each 等于 a。第二个等于 b,第三个等于 c。所以在 for 循环中 for 之后的词等于列表中的元素。 当你尝试执行

 for each in mylist:
        print(a)

它不会工作,因为您正试图打印一个不存在的变量 a。在你的例子中,当你写 xyz 时,你让它等于字典中的键,这样你就可以写 print(r[xyz]).

在第 8 种情况下,您正在尝试获取与键 xyz 关联的值。由于您没有密钥 xyz 您的代码失败。

在你的第 5 个场景中,你的 print(xyz) returns A 和 B 以及 C.If 你尝试打印类似 "Hello World" 的东西,它会写 Hello World 而不是 "Hello World" .它写了 Hello World" 的事实不会改变 print 有参数 "Hello World".

的事实

为了进一步了解,您可以对此进行测试。

for each in mylist:
    if each=="a":
        print(each)

这将打印一次证明每个都等于 "a" 而不是 a.One 更多示例来澄清事情。 你写道,当你打印 xyz 时,你得到了 A 结果,所以 "xyz" 应该是 "A"。这是 wrong.When 你在 " " 里面写了一些东西,这意味着它们将是一个字符串,它们如果他们有 one.Test this.

则不会调用他们的值
val=3
if "val"=="3":
    print ("something")

这不会打印一些东西,因为 "val" 等于 "val" 而不是“3”

结论:当你写print(r[xyz])时,它并不意味着print(r[A])。它意味着print(r["A"])

让我们把它分成几个阶段,看看是否有帮助。我假设你很高兴 for 循环 for xyz in r: 相当于做:

xyz = 'A'
# Do the contents of the loop
xyz = 'B'
# Do the contents of the loop
xyz = 'C'
# Do the contents of the loop

所以为了让例子更简单,我们可以看这个案例:

r = {'A':'aa', 'B':'bb', 'C':'cc'}
xyz = 'A'   

现在,如果我们这样做:

print(r[xyz])

这有几件事。

  1. xyz 不在引号中,因此 Python 将其视为某物的标签(或 'name')
  2. xyz确实是个标签!它是一个包含值 'A' 的变量,一个字符串。
  3. Python 交换 xyzvalue,所以我们现在要执行的打印语句看起来像 print(r['A'])
  4. Python 检查字符串 'A' 是否是字典 r 中的关键字。是!
  5. 'A' 的条目值为 'aa',也是一个字符串,因此打印语句现在如下所示:print('aa')。没有其他可查找的内容,所以这就是 python 执行的内容。

如果我们尝试这样做:

print(r['xyz'])
  1. 'xyx' 是一个文字字符串,因此 python 会尝试查看 r 中是否有具有键 'xyz'
  2. 的条目
  3. r中没有名为'xyz'的键,所以python显示错误

下一个:

print(r[A])
  1. A 不在引号中,因此 Python 将其视为某物的标签
  2. 程序中不存在名为 A 的标签,因此 Python 无法查找它的值!
  3. Python 显示错误,因为它无法查找 A
  4. 的值

希望这能消除报价差异。