列表理解从字典中提取元组列表

Ale*_*sch 11 python tuples list-comprehension list

我想在下面的列表中使用列表理解;

movie_dicts = [{'title':'A Boy and His Dog', 'year':1975, 'rating':6.6},
           {'title':'Ran', 'year':1985, 'rating': 8.3},
           {'title':'True Grit', 'year':2010, 'rating':8.0},
           {'title':'Scanners', 'year':1981, 'rating': 6.7}]
Run Code Online (Sandbox Code Playgroud)

使用我对列表理解和词典的了解,我知道

movie_titles = [x['title'] for x in movie_dicts]
print movie_titles
Run Code Online (Sandbox Code Playgroud)

将打印一个包含电影标题的列表.

为了提取我尝试过的(标题,年份)元组列表 -

movie_tuples = [x for ('title','year') in movie_dicts]
print movie_tuples
Run Code Online (Sandbox Code Playgroud)

我收到错误SyntaxError:无法分配给文字

我不确定如何使用列表推导来获取两个(特定的)键/值对(这样做会自动生成一个元组?)

Hug*_*ell 23

movie_dicts = [
    {'title':'A Boy and His Dog', 'year':1975, 'rating':6.6},
    {'title':'Ran', 'year':1985, 'rating': 8.3},
    {'title':'True Grit', 'year':2010, 'rating':8.0},
    {'title':'Scanners', 'year':1981, 'rating': 6.7}
]

title_year = [(i['title'],i['year']) for i in movie_dicts]
Run Code Online (Sandbox Code Playgroud)

[('A Boy and His Dog', 1975),
 ('Ran', 1985),
 ('True Grit', 2010),
 ('Scanners', 1981)]
Run Code Online (Sandbox Code Playgroud)

要么

import operator
fields = operator.itemgetter('title','year')
title_year = [fields(i) for i in movie_dicts]
Run Code Online (Sandbox Code Playgroud)

这给出了完全相同的结果.

  • 实际上,LC里面的括号*是必要的:P你可以把它们留在作业,返回,屈服声明中(几乎在其他任何地方,这些都是我现在能想到的). (3认同)