Python:多维列表作为字典中键的值

时间:2017-05-18 06:13:53

标签: python dictionary

d1 = {}   
d2 = {}   
l1 = [1, 2, 3]   
l2 = [4, 5, 6]   

选择A:将字典的第一个键初始化为空列表

d1[0] = []   
d1[0].append(l1)   
d1[0].append(l2)   
print(d1)   
{0: [[1, 2, 3], [4, 5, 6]]}  

选择B:没有将字典的第一个键初始化为空列表

d2[0] = l1    
d2[0].append(l2)     
print (d2)    
{0: [1, 2, 3, [4, 5, 6]]}

我正在学习Python。有人可以解释为什么我看到A和B之间的不同行为。我想在A中编码行为,但不明白为什么B给出不同的结果。谢谢。

3 个答案:

答案 0 :(得分:0)

d2[0] = [l1]   # this needs to be a list containing l1    
d2[0].append(l2)     
print (d2)    

答案 1 :(得分:0)

这是因为,

情况1:

d1[0] = [] # you assign a empty list to your 0 key of dict d1
d1[0].append(l1) #you append a list to the empty list {0: [[1, 2, 3]]}
d1[0].append(l2) #you append a list to the existing list
print(d1)   
{0: [[1, 2, 3], [4, 5, 6]]} 

情况2:

d2[0]=l1 # you assign a list to your 0 key of dict d2
d2[0].append(l2) # now you append l2 list to list l1. That is l2 is added as the last element of l1
print (d2) 
{0: [1, 2, 3, [4, 5, 6]]}

情形3:

d3={}
d3[0] = [l1] # you assign a list with element l1 in it to your 0 key of dict d2 and 
d3[0].append(l2) # now you append l2 list to list that already contains l1. That is l1 is the first element and l2 is the second element
print (d3)

答案 2 :(得分:0)

选择A 中: 您已将[]空列表分配给d1[0],然后将l1l2作为两个新元素添加到列表[]

选择B 中: 您已将l1本身分配给d2[0],并仅将l2作为l1的新元素附加。

你必须记住,为变量分配[]将在内存中创建新的列表对象。