谁能帮我吗?这些代码是有线的(python)

时间:2018-06-25 10:22:42

标签: python python-3.x

n = int(input())
name = []
T = {}

for i in range(n):
    data = input().split(" ")
    if data[2] not in name:
        name.append(data[2])
        T[data[2]] = {}
    T[data[2]][data[0]] = data[1]
    print(T)

输入以下内容:

4

key2 1 A

key3 2 B

key1 5 A

key1 5 B

当我删除“ name.append(data [2])”时,我得到了

{'A':{'key2':'1'}}
{'A':{'key2':'1'},'B':{'key3':'2'}}
{'A':{'key1':'5'},'B':{'key3':'2'}}
{'A':{'key1':'5'},'B':{'key1':'5'}}

如果没有,我会得到

{'A':{'key2':'1'}}
{'A':{'key2':'1'},'B':{'key3':'2'}}
{'A':{'key2':'1','key1':'5'},'B':{'key3':'2'}}
{'A':{'key2':'1','key1':'5'},'B':{'key3':'2','key1':'5'}}

为什么?

2 个答案:

答案 0 :(得分:1)

删除name.append(data[2])后,每次循环中T[data[2]][data[0]] = data[1]都会被覆盖,因此您将获得T中的最后一个值。

答案 1 :(得分:0)

  

当我删除name.append(data[2])

您的代码正在使用name来确定是否需要重新创建A中的BT键。如果您停止对此进行跟踪,则每次都会重新创建它们,因此只有最后的更改可见(因为之前的所有更改都被丢弃了)。

顺便说一句,您可以通过将name条件从if更改为data[2] not in name来完全删除data[2] not in T变量。使用in检查字典中是否有内容,只检查该字典的键,这就是您想要的。