2013-09-25 3 views
3

Я только что сделал этот короткий код для python. Это график для школы. Я часто не использую словари, потому что это та часть, о которой я всегда путаю.Сокращение печати отдельных значений в словаре

То, что я хочу в коде является print(monday["Period 1"]), который повторяю 5 раз, чтобы быть очищены, поэтому потребуется только одна строка кода.

Я думал, я должен использовать цикл for. Но так как я действительно не иду на циклы, я понятия не имею, как их правильно использовать. За исключением одного или двух.

Вот мой код, который я сделал пока.

monday = {"P1" : "1 - English", 
     "P2" : "2 - Maths", 
     "P3" : "3 - PE", 
     "P4" : "4 - Computing", 
     "P5" : "5 - Computing"} 

choice_day = input("What day would you like to know what you have? ") 
choice_period = input("What period? Or just type NO if you want to know the full day: ") 

if choice_day == "monday" and choice_period == "NO": 
    print(monday["P1"]) 
    print(monday["P2"]) 
    print(monday["P3"]) 
    print(monday["P4"]) 
    print(monday["P5"]) 
+0

Возможно, словари не так хороши в выборе здесь, в первую очередь. – hop

ответ

2

Список всех значений в словаре существует как monday.values()

if choice_day == "monday" and choice_period == "NO": 
    for v in monday.values(): 
     print v 

или вы можете поместить каждое значение из списка в одну строку присоединились новой строкой:

if choice_day == "monday" and choice_period == "NO": 
    print '\n'.join(monday.values()) 

Если они должны быть в порядке, используйте sorted:

if choice_day == "monday" and choice_period == "NO": 
    print '\n'.join(sorted(monday.values())) 
+0

Как я мог понять, что 'sorted (monday)' == 'sorted (monday.keys())' but 'sorted (monday)' лучше, чем 'sorted (monday.keys())', поскольку ему нужен один вызов функции , Но для дальнейшего решения нам нужно 'join()'. Итак, какой из них будет хорош. '' \ n'.join (отсортировано (monday.values ​​())) 'или' '\ n'.join (понедельник [k] для k в порядке) 'Я предпочту, чтобы ваш первый был меньше. Есть ли другая причина предпочтения. –

0

dict имеет метод values(), который возвращает список всех значений, доступных в данном словаре. Вы можете просто перебрать этот список, попробуйте этот код:

if choice_day == "monday" and choice_period == "NO": 
for v in monday.values(): 
    print v 

Предположим, вы просто хотели напечатать ключи затем использовать keys() метод вместо values()

if choice_day == "monday" and choice_period == "NO": 
for k in monday.keys(): 
    print k 

А если хочет напечатать обе клавиши, значения затем использовать items():

if choice_day == "monday" and choice_period == "NO": 
for k, v in monday.items(): 
    print k, v 
+0

Спасибо! понять это сейчас! :) – user2816683

+0

@ user2816683 Прочтите [эту страницу] (http://www.tutorialspoint.com/python/dictionary_values.htm) и прочитайте другой ответ, включая другие методы. –

1

Предполагая, что вы хотите напечатать значения в соответствии с в алфавитном порядке ключей, как в вашем примере, вы можете использовать что-то вроде следующего:

if choice_day == "monday" and choice_period == "NO": 
    print '\n'.join(monday[k] for k in sorted(monday)) 

Если в Вашем коде ключи должны быть упорядочены по-другому, чем в алфавитном порядке рода, и вы знаете, что этот порядок в заранее, вы можете сделать что-то вроде следующего:

order = ["P1", "P2", "P3", "P4", "P5"] 
if choice_day == "monday" and choice_period == "NO": 
    print '\n'.join(monday[k] for k in order) 
+0

Я также учащийся в Python, я хочу знать 'sorted (понедельник) '? это сортировка по клавишам? и какой из них лучше ваш или 'sorted (monday.values ​​()' **? ** –

+0

@Grijesh, 'sorted' будет отбрасывать dict в список. Если вы нарисуете dict в список, вы просто получите ключи: 'list (понедельник)' дает '['P2', 'P3', 'P1', 'P4', 'P5']', эквивалент 'monday.keys()'. – askewchan

+0

На самом деле это не кастинг, 'sorted()' принимает итерацию и возвращает отсортированный список. При повторении по dict вы получаете ключи, поэтому 'sorted (monday)' совпадает с 'sorted (monday.keys()). –

1

Конечно, вы хотите увидеть курсы в порядке. dict значения по существу не имеют порядка. Таким образом, использование list может быть более подходящим, чем использование dict здесь.

monday = ["1 - English", 
      "2 - Maths", 
      "3 - PE", 
      "4 - Computing", 
      "5 - Computing"] 

if choice_day == "monday" and choice_period == "NO": 
    for course in monday: 
     print(course) 

не используя Dict вы избежите необходимости сортировать или использовать список, объявляя, что период 1 предшествует период 2 и т.д. (например order = ['P1', 'P2', ...]). Список делает заказ встроенным.

Если по какой-то причине вам нужно было получить доступ, скажем, к третьему курсу в понедельник, так как Python использует индексирование на основе 0, вы должны написать monday[2].


Вы можете, однако, необходимо использовать Dict, чтобы представить весь график:

schedule = {'monday': ["1 - English", 
         "2 - Maths", 
         "3 - PE", 
         "4 - Computing", 
         "5 - Computing"] 
      'tuesday': [...]} 

Вы бы использовать dict здесь, так как пользователь может ввести любой день недели. Если вы всегда получали доступ к расписанию по порядку, тогда вы хотели бы использовать упорядоченную структуру данных, такую ​​как список или кортеж.

Теперь вы можете обрабатывать любое значение для choice_day как это:

if choice_period == "NO": 
    for course in schedule[choice_day]: 
     print(course) 

(Обязательно подумайте о том, как вы хотите обрабатывать случай, когда пользователь вводит choice_day, который не существует ... Один из вариантов . является ветеринаром выбора, когда он вводится Другой альтернативой является использование try..except здесь а третье -. мое предпочтение. - это использование argparse)

Во всяком случае, с помощью Dict для schedule позволяет избежать mind- онемение кода:

if choice_day == 'monday': 
    ... 
elif choice_day == 'tuesday': 
    ... 
Смежные вопросы