我希望在字典中输入用户输入的数据。这是我的密码:
n= int(raw_input("Enter no of customers:"))
d={}
d1={}
d2={}
for i in range(n):
print "Enter Details for customer-{}".format(i+1)
s="Customer-{}".format(i)
#print s
#print type(s)
d1["Name"]=raw_input("Enter Name:")
d1["Phone"]=long(raw_input("Enter Phone:"))
d1["Tab"]=float(raw_input("Enter Tab:"))
d2["Address-1"]=raw_input("Enter Address-1:")
d2["Address-2"]=raw_input("Enter Address-2:")
d2["State"]=raw_input("Enter State:")
d1["Address"]=d2
d[s]=d1
#print d
print d
for k,v in d.iteritems():
print k
for k1,v1 in d1.iteritems():
if k1=="Address":
print "\tAddress:"
else:
print "\t",k1,":",v1
for k2,v2 in d2.iteritems():
print "\t\t",k2,":",v2我面临的问题是,它正在覆盖数据,而我无法理解原因。
产出如下:
Customer-1
Phone : 433
Name : ggg
Tab : 433.0
Address:
State : 434
Address-2 : 443
Address-1 : 4343
Customer-0
Phone : 433
Name : ggg
Tab : 433.0
Address:
State : 434
Address-2 : 443
Address-1 : 4343
Customer-2
Phone : 433
Name : ggg
Tab : 433.0
Address:
State : 434
Address-2 : 443
Address-1 : 4343请,任何帮助都是感激的!
发布于 2013-08-30 11:25:53
您需要在循环中创建一个新字典:
d={}
for i in range(n):
d1={}
d2={}否则,您将继续分配相同的对象,并在循环中一次又一次地更改它。
您只是在d中存储对现有字典的引用,而不是副本。您可以创建对一个字典的多个引用,并且通过所有这些引用都可以看到任何更改:
>>> foo = {}
>>> bar = foo
>>> foo['eggs'] = 'ham'
>>> bar
{'eggs': 'ham'}
>>> foo['eggs'] = 'spam'
>>> bar
{'eggs': 'spam'}表达式d[s]=d1只在d中的给定键下存储对d1的引用,所有这些引用都指向同一个对象。通过将d1 = {}和d2 = {}行移动到循环中,您可以在每次迭代中创建新字典。
确保您正在创建对新字典的引用的另一种方法是使用 method创建一个新字典的副本,但是在这里创建一个新字典更好。
您可能也希望给变量更好的名称;也许您希望使用d、d1和d2,而不是使用customers、customer和address。
https://stackoverflow.com/questions/18531714
复制相似问题