使用列表推导从字典中提取元组列表
我想在下面这个列表上使用列表推导;
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}]
根据我对列表推导和字典的了解,我知道
movie_titles = [x['title'] for x in movie_dicts]
print movie_titles
会打印出一个包含电影标题的列表。
为了提取一个包含(标题,年份)元组的列表,我尝试了 -
movie_tuples = [x for ('title','year') in movie_dicts]
print movie_tuples
但是我收到了一个错误,提示是 SyntaxError: can't assign to literal。
我不太确定如何使用列表推导来获取这两个(特定的)键/值对(这样做会自动生成一个元组吗?)
4 个回答
2
[(movie_dict['title'], movie_dict['year']) for movie_dict in movie_dicts]
记住,xs = [expr for target in expr2]
这段代码的意思几乎是等同于下面的内容(为了简单起见,我们忽略了StopIteration
):
xs = []
for target in expr2:
xs.append(expr)
所以,target
需要是一个普通的变量名,或者是一个可以拆解的元组。但因为 movie_dicts
里面没有可以拆解的序列,只有简单的单个值(字典),所以你只能用一个变量。然后,当你把生成的列表添加元素时,可以创建一个元组,随便对当前的项目做你想做的事情。
3
这个版本让你最少需要重复自己:
>>> fields = "title year".split()
>>> movie_tuples = [tuple(map(d.get,fields)) for d in movie_dicts]
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]
给出
[('A Boy and His Dog', 1975),
('Ran', 1985),
('True Grit', 2010),
('Scanners', 1981)]
或者
import operator
fields = operator.itemgetter('title','year')
title_year = [fields(i) for i in movie_dicts]
这两者的结果是完全一样的。