如何在Python中找到字典列表中最长的标题并打印名称以及标题有多少个字符?

问题描述 投票:0回答:4

我开始学习一些编码,但我一直在思考如何用 python 解决这个问题。我有一个字典列表,我必须遍历并打印最长的电影标题和标题的整数长度。

到目前为止,我可以打印长度(虽然是错误的胶片),但标题将“y”识别为最高值,而不是打印全名。

def get_max_movie_name_length():
  for length in movies:
    title = length["title"]
  for name in movies:
    film_title = name["title"]
  return [max(film_title), len(title)]

get_max_movie_name_length()

名单:

[{'title': 'The Shawshank Redemption'},
 {'title': 'The Godfather'},
 {'title': 'The Dark Knight'},
 {'title': 'The Godfather: Part II'}]

答案就像“肖申克的救赎”“24” 谢谢你

python max length
4个回答
2
投票

您只需要内置

max
函数和正确的
key
参数来比较列表元素。

>>> lst = [{'title': 'The Shawshank Redemption'},
...  {'title': 'The Godfather'},
...  {'title': 'The Dark Knight'},
...  {'title': 'The Godfather: Part II'}]
>>> max(lst, key=lambda x: len(x['title']))
{'title': 'The Shawshank Redemption'}
>>> longest_title_show = max(lst, key=lambda x: len(x['title']))
>>> len(longest_title_show['title'])
24

1
投票

首先,您需要循环遍历字典列表以找到标题最长的电影。您可以在迭代列表时跟踪最大长度和相应的电影标题。

这是更正后的代码:

def get_max_movie_name_length(movies):
    max_length = 0
    max_title = ""

    for movie in movies:
        title = movie["title"]
        if len(title) > max_length:
            max_length = len(title)
            max_title = title

    return max_title, max_length

movies = [
    {'title': 'The Shawshank Redemption'},
    {'title': 'The Godfather'},
    {'title': 'The Dark Knight'},
    {'title': 'The Godfather: Part II'}
]

longest_movie_title, title_length = get_max_movie_name_length(movies)
print("Longest movie title:", longest_movie_title)
print("Title length:", title_length)

0
投票

已经提供了有效的解决方案 - 我想阐述为什么你的方法不起作用。

您有一个 for 循环,它迭代每个“电影对象”(每个字典代表一部电影):

for length in movies:

你所说的

length
是一个电影对象,或者一本字典。
length
这个名字不太好。为什么不直接称呼它为
movie
?我离题了,对于这个循环的每次迭代,你都会:

title = length["title"]

在第一次迭代中,您将创建一个名为

title
的变量,并将当前电影的标题绑定到该变量。然后,在循环的下一次迭代中,您将重新绑定
title
变量以指向下一部电影的标题。这一直持续到您迭代完所有电影对象为止,循环完成后,
title
将指向最后一个电影的标题。所以,基本上这个循环没有做任何有用的事情,而且它肯定没有达到你的预期。

第二个 for 循环的情况类似。你所说的

name
是一个电影对象/单个字典。
movie
会是一个更好的名字。同样,您正在迭代电影集合,首先创建一个新变量
film_title
,然后将其重新绑定以指向下一部电影的标题。当这个循环完成时,
film_title
将指向上一部电影的标题,就像
title
一样。这些循环都没有达到您想要的效果。

换句话说,当两个循环完成后,你的变量将指向:

title => 'The Godfather: Part II'
film_title => 'The Godfather: Part II'

它们绑定到字符串

'The Godfather: Part II'
,因为这是您电影收藏中最后一部电影的标题。

然后,返回一个列表,其中第一个元素是

max(film_title)

这相当于

max('The Godfather: Part II')
。当您将字符串传递到内置
max
时,它将按字典顺序比较字符 - 根据它们在 ASCII 表中出现的顺序。例如在Python shell中进行简单的测试:

>>>max('abc')
'c'

-1
投票

我会为列表中的每个项目创建一个

(len(title), title)
元组。接下来,对元组列表进行排序(默认情况下,元组将按第一个元素排序,即长度)。最后,取出排序列表的最后一个元素。

您可以使用列表理解在一行中完成此操作:

data = [
    {'title': 'The Shawshank Redemption'},
    {'title': 'The Godfather'},
    {'title': 'The Dark Knight'},
    {'title': 'The Godfather: Part II'}
]

longest = sorted([(len(v), v) for d in data for v in d.values()])[-1]
print(longest) #(24, 'The Shawshank Redemption')

正如所指出的,使用 max 将是更好的选择。

longest = max([(len(v), v) for d in data for v in d.values()])
© www.soinside.com 2019 - 2024. All rights reserved.