2013-12-16 3 views
2

Когда я пытаюсь повторить этот словарь, он только распечатывает дважды клиента с «2222» в качестве ключа. Я понятия не имею, почему это происходит. Раньше я пытался использовать разные переменные для клиентов c1 и c2 (вместо просто c), но это побеждало цель использования цикла for для печати словаря.Итерация словаря в Python

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 второй?

+0

'dict's ** не ** приказал. Сначала вы должны скопировать элементы в список, отсортировать список и вывести результат. Кроме того, на вашем выходе нет '1111'. – Bakuriu

+0

Ваш код немного перепутал; вы можете убедиться, что это то, что вы намеревались написать. Также покажите 'Customer.Customer'. –

+0

Проблема не в заказе, она итерации через диктофон и возможность распечатывать информацию каждого клиента. – user3106444

ответ

2

Это именно то, что вы сказали своей петле: перейдите к набору ключей, и для каждой клавиши в словаре напечатайте ряд переменных с переменной. Измените цикл следующим образом:

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

Я считаю, что getCNumber является метод, а не переменная, так что вы должны назвать его - добавить пару скобок после имени метода, так как я показал выше.
Кроме того, как правило, лучше придерживаться соглашений об именах python и запускать имена ваших переменных из строчных букв - поэтому вы должны переименовать переменную Dict в нечто вроде dict.
Если вам необходимо пройти ключи словаря в отсортированном порядке, вы можете написать for петли следующим образом:

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

. Он не будет заказываться по его просьбе, ему необходимо использовать OrderedDict –

+0

@KobiK, чтобы прочитать последний комментарий OP в его вопрос. – aga

+0

Именно поэтому я написал комментарий: «1111 сначала, а затем клиент 2222 секунды», но я вижу на вашем редактировании, что вы добавили 'sorted()' so +1 для этого :) –

1
for key in Map.keys(): 

Вы называли свой Dict Dict раньше. Если то, что вы опубликовали, это то, что вы на самом деле выполняли, то это итерация по совершенно несвязанному dict.

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

Вы ссылаетесь c здесь, а не все, что связано с key. c все еще последний клиент, которого вы создали. Если Map содержит два ключа, это будет печатать информацию c дважды. (На самом деле, поскольку круглые скобки для вызова функций отсутствуют, он может печатать что-то по линиям <bound method object at...>.)

1

не требуется.

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 

Looping над Словаре дает key.

Смежные вопросы