Chciałbym wydrukować klucze słownika poziomego i na każdym trzecim kluczu, aby utworzyć nową linię. Napisałem to tak:

fields= {1 : "not", 2 : "not", 3 : "not",
         4 : "not", 5 : "not", 6 : "not",
         7 : "not", 8 : "not", 9 : "not"} 
for i in fields:
print(i)
if i%3==0:
    print ("\n")

Jednak wyjście jest następnie po prostu poziome z dwoma netlinami między każdą trzecią liczbą.

Wyjście, które chciałbym mieć, to:

123

456.

789.

0
Juan Naym 27 czerwiec 2017, 19:03

4 odpowiedzi

Najlepsza odpowiedź

Czy to jest to, czego chcesz ?

fields= {1 : "not", 2 : "not", 3 : "not",
         4 : "not", 5 : "not", 6 : "not",
         7 : "not", 8 : "not", 9 : "not"}
for Key,values in fields.items():
    print(Key, end = "")#python3 , if in python2 use print item, instead.
    if Key%3==0:
        print ("\n")


123

456

789
0
BENY 27 czerwiec 2017, 16:14

Chociaż rozwiązania działają dla danej sprawy, chciałbym ci coś wyjaśnić. dictionary w Pythonie nie jest zamówiony. W takim przypadku jest w porządku ze względu na sposób, w jaki zadeklarowałeś go po prostu prostych kluczy {x1}}. Możesz myśleć tak działa dykt. nie !

>>> a = {1 : "not", 2 : "not", 3 : "not",4 : "not", 5 : "not", 6 : "not",7 : "not", 8 : "not", 9 : "not"}
>>> a
{1: 'not', 2: 'not', 3: 'not', 4: 'not', 5: 'not', 6: 'not', 7: 'not', 8: 'not', 9: 'not'}

Dobrze, więc w tym przypadku wszystkie rozwiązania działałyby. Jeśli jednak myślisz o tym samym i spróbuj tego samego kodu dla następujących dict

>>> a= {12 : "not", 21 : "not", 30 : "not",4 : "not", 15 : "not", 61 : "not",71 : "not", 8 : "not", 19 : "not"}

Wyjście byłoby nie w tej samej kolejności.

>>> a
{19: 'not', 4: 'not', 21: 'not', 71: 'not', 8: 'not', 12: 'not', 61: 'not', 30: 'not', 15: 'not'}

A jeśli spróbujesz iterować i drukować za pomocą for keys in a: Wprowadziłbyś wiele problemów.

Chcesz więc żądany wyjście (dykt nie jest zamówiony tak nieprzewidywalny) użyj OrderedDict

from collections import OrderedDict
fields = [(1, 'not'), (2, 'not'), (3, 'not'),
          (4, 'not'), (5, 'not'), (6, 'not'),
          (7, 'not'), (8, 'not'), (9, 'not')]
a = OrderedDict(fields)
for i,key in enumerate(a):
    print(key,end='')
    i+=1
    if i%3==0:
        print()

Wynik:

123
456
789

Należy również użyć również enumerate() do wydrukowania co trzy wartości. Nie polegaj na kluczu. Co jeśli kluczowe zmiany?

Ja, klucz wyliczający (słownik) po prostu wyraża wartości, takie jak te 0,key1, 1,key2, 2,key3, ... i tak dalej. Po prostu wyraża pary liczby, to wszystko.

Spróbuj zmienić klucze i użyć tego kodu i innych kodów, a zauważysz, jak bardzo się zmieniasz wyniki, będą takie same dla tego rozwiązania. A nie dla innych. Pamiętaj Zawsze Twój kod powinien być dostosowywany. Nie powinien całkowicie zależy od określonych zestawów wejściowych

123
456
789

Również Uwaga Just print() zrobiliby, jeśli chcesz, aby rozdzielili się na Newlines. Użyj `Drukuj (" N "), jeśli chcesz między nimi luki (Newline).

123

456

789
0
void 27 czerwiec 2017, 17:05

print (i), zrobi dla ciebie sztuczkę. Na bocznym notatce wcięcie twojego kodu jest nieprawidłowe.

fields= {1 : "not", 2 : "not", 3 : "not",
         4 : "not", 5 : "not", 6 : "not",
         7 : "not", 8 : "not", 9 : "not"} 
for i in fields:
  print (i),
  if i%3==0:
    print ("\n")`
0
Varun1244 27 czerwiec 2017, 16:26

Jeśli używasz Pythona 3, lub zaimportuj funkcję drukowania dla Python 2, możesz określić parametr końcowy druku, takich jak to: print(i, end="") i nie będzie nowa linia między kluczem słownika. Ale ponieważ klucze słownikowe nie są one wydrukowane w kolejności "Random", aby uniknąć tego, wykonaj listę kluczy i sortować go przed drukowaniem, w ten sposób: keys = sorted(dict.keys())}

0
Balázs Kovacsics 27 czerwiec 2017, 16:15