如何只打印一个列表元素,其中列表是键:值对中的值



我对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

不管怎样,如果你们中的任何一个人能在这里帮助我,我将不胜感激!

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

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   
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. 在第一个命令中,我们使用列表理解创建对(元组((作者,书籍(,然后对元组列表进行排序。

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

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

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

@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

最新更新