缩短字典中打印单个值的时间

时间:2013-09-25 19:07:32

标签: python dictionary

我刚刚为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"])

4 个答案:

答案 0 :(得分: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()))

答案 1 :(得分: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)

答案 2 :(得分: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)

通过不使用词典,您可以避免必须排序,或使用一个列表,声明句点1出现在句号2之前,等等(例如order = ['P1', 'P2', ...])。该列表使订单内置。

如果由于某种原因你需要访问星期一的第3门课程,因为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。)

无论如何,使用schedule的dict可以避免让人头脑麻木的代码如下:

if choice_day == 'monday':
    ...
elif choice_day == 'tuesday':
    ...

答案 3 :(得分: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