【问题标题】:How to print only one list element where list is value in key:value pair如何仅打印一个列表元素,其中列表是键:值对中的值
【发布时间】:2022-11-15 04:59:29
【问题描述】:

我真的是 python 世界的新手,尤其是字典,所以我的问题的答案很可能很简单,但我真的想不通......

我的问题是,当我有一个以列表作为值的字典时,我似乎无法弄清楚如何在特定位置访问一个特定的列表元素。

更具体地说,我有以下列表:

my_books = {'Eragon': [2007,'Paolin'], 'Harry Potter': [1992,'Rowling'], 'Obscura': [2017, 'Canon'], 'Many Wonders': [1964,'Meyers'], 'Never': [2001, 'McKey']}

我现在想要实现的是,它在一个非常简单的按字母顺序排序的表中返回列表位置 1 的值和书名(键)。

输出要求:

Canon       Obscura
McKey       Never
Meyers      Many Wonders
Paolin      Eragon
Rowling     Harry Potter

我似乎无法弄清楚的是如何只打印位置 1 的列表元素,而不是整个列表。

我的代码:

for book in my_books:
    print(my_books[book], '     ', book)

我的输出:

[2007,'Paolin']     Eragon
[1992,'Rowling']    Harry Potter
[2017, 'Canon']     Obscura
[1964,'Meyers']     Many Wonders
[2001, 'McKey']     Never

无论如何,如果你们中的任何人能帮助我,我将不胜感激!

【问题讨论】:

  • 谢谢大家非常有帮助的cmets!

标签: python list dictionary key


【解决方案1】:

首先,您需要根据作者姓名对字典进行排序。然后遍历排序的键并以格式化的方式打印所需的参数。例如:

my_books = {
    "Eragon": [2007, "Paolin"],
    "Harry Potter": [1992, "Rowling"],
    "Obscura": [2017, "Canon"],
    "Many Wonders": [1964, "Meyers"],
    "Never": [2001, "McKey"],
}

for key in sorted(my_books, key=lambda k: my_books[k][1]):
    print("{:<15} {:<15}".format(my_books[key][1], key))

印刷:

Canon           Obscura        
McKey           Never          
Meyers          Many Wonders   
Paolin          Eragon         
Rowling         Harry Potter   

【讨论】:

    【解决方案2】:
    author_book = sorted([(my_books[book][1], book) for book in my_books])
    
    for author, book in author_book:
        print(f"{author:10}{book}")
    

    说明:

    1. 在第一个命令中,我们使用列表理解创建对(元组)(作者,书籍),然后对这个元组列表进行排序。

      • 默认情况下,元组按它们的第一个元素(作者)排序。
        (在同一作者的情况下,他们的第二个元素用作第二个排序键。)

      • 列表理解的 my_books[book][1] 部分意味着

        • 我们使用book键来获取它的值(my_books[book]),并且
        • 因为这个值是一个列表作者姓名在1的位置(从零开始计数),我们附加 [1] 以获得作者姓名。
    2. 在第二个命令中,我们将它们打印为单独的元素,使用f弦使用 :10 格式为作者保留足够的 (10) 个位置以达到良好的列格式。

    【讨论】:

      【解决方案3】:

      来自@Andrej Kesey 的优秀答案的变体,它不需要 lambda 但依赖于元组的自然排序过程:

      my_books = {
          "Eragon": [2007, "Paolin"],
          "Harry Potter": [1992, "Rowling"],
          "Obscura": [2017, "Canon"],
          "Many Wonders": [1964, "Meyers"],
          "Never": [2001, "McKey"],
      }
      
      for author, title in sorted((value, key) for key, (_, value) in my_books.items()):
          print(f'{author:<12}{title}')
      

      输出:

      Canon       Obscura
      McKey       Never
      Meyers      Many Wonders
      Paolin      Eragon
      Rowling     Harry Potter
      

      【讨论】:

        猜你喜欢
        • 2018-02-22
        • 2021-04-02
        • 2019-11-29
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 2022-07-07
        相关资源
        最近更新 更多