a = [['ems', '无物流信息', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'],
['韵达', '运输中', '异常'], ['圆通', '已签收', '正常'], ['圆通', '已签收', '正常'], ['圆通', '派件中', '正常'], ['圆通', '运输中', '异常']]
c = {}
d = {}
for f in a:
if f[0] in c:
pass
else:
c[f[0]] = {}
if f[1] in d:
pass
else:
d[f[1]] = 0
print(c)
print(d)
for f in c.keys():
c[f] = d
print(c)
c['ems']['运输中'] = 1
print(c)
c = {'ems': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0}, '圆通': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0},
'韵达': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0}}
c['ems']['运输中'] = 1
print(c)
for循环赋值语句中的d指向的是同一个字典的地址,所以不管怎么修改,同一个字典都会发生变化。
把d复制一下即可,下面两种方法都可以,
for f in c.keys():
c[f] = d.copy()
print(c)
for f in c.keys():
c[f] |= d
print(c)
d是一个变量,它存储的是那一串数据数据的地址。
你用循环将b变量中地址赋值给了c所有的value,他们都指向同一个地址,你改其中一个,其他的因为是指向的同一个,读出来的值也是相同的。
你下面这个是直接创建了一个字典键值对,每个key的vlue没有联系。