在Python中迭代字典

时间:2013-12-16 07:53:19

标签: python dictionary

当我尝试迭代这个词典时,它只打印出两倍于“2222”作为键的客户。我不知道为什么会这样。在过去,我试图为客户c1和c2(而不仅仅是c)使用不同的变量,但这就失去了使用for循环打印字典的目的。

Dict = {}
c = Customer.Customer("1111","Jake","Main St","Happy Valley","CA","96687","8976098765")
Dict[c.getCNumber()] = c
print(Dict[c.getCNumber()].getCNumber())
c = Customer.Customer("2222","Paul","3342 CherrySt","Seatle","WA","98673","9646745678")
Dict[c.getCNumber()] = c
print(Dict[c.getCNumber()].getCNumber())

for key in Dict.keys():
  print("***Customer***")
  print("Customer Number: " + c.getCNumber)

打印:

***Customer***
Customer Number: 2222
***Customer***
Customer Number: 2222

如何让它迭代并首先拥有客户1111,然后是客户2222秒?

3 个答案:

答案 0 :(得分:2)

这正是你告诉你的循环要做的事情:遍历一个密钥集,并且为字典中的每个键打印一些c变量。像这样改变你的循环:

for key in Dict.keys():
   print("***Customer***")
   print("Customer Number: " + Dict[key].getCNumber())

我认为getCNumber是方法,而不是变量,因此您需要调用它 - 在方法名称后添加几个括号,如上所示。
此外,坚持使用python命名约定并从小写字母开始变量名称通常更好一点 - 所以你应该将Dict变量重命名为dict
如果需要按排序顺序遍历字典的键,可以像这样编写for循环:

for key in sorted(dict.keys()):

答案 1 :(得分:1)

for key in Map.keys():

之前您正在调用您的词典Dict。如果你发布的是你实际运行的内容,那么这就是在一个完全不相关的词典上进行迭代。

  print("Customer Number: " + c.getCNumber)

您在此处引用c,而不是与key相关的任何内容。 c仍然是您创建的最后一位客户。如果Map包含两个键,则会两次打印c的信息。 (实际上,由于缺少函数调用括号,它可能会打印<bound method object at...>行的内容。)

答案 2 :(得分:1)

.keys不是必需的。

Python 2

In [127]: d = {'a': 1, 'b': 2}

In [128]: for key in d:
.....:     print(key)
.....:
a
b

Python 3

In [34]: d = {'a': 1, 'b': 2}

In [35]: for key in d:
....:     print(key)
....:
a
b

在dict上循环给出key