簡體   English   中英

列表理解從字典中提取元組列表

[英]List comprehension to extract a list of tuples from dictionary

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

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:無法分配給文字

我不確定如何使用列表推導來獲取兩個(特定的)鍵/值對(這樣做會自動生成一個元組?)

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]

這給出了完全相同的結果。

此版本至少重復自己:

>>> fields = "title year".split()
>>> movie_tuples = [tuple(map(d.get,fields)) for d in movie_dicts]
[(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不包含movie_dicts中解壓縮的序列,而是簡單的單個值(dicts),因此必須將其限制為一個變量。 然后,當您追加到生成的列表時,您可以創建一個元組並執行您想要對當前項執行的任何其他操作。

如果您不必使用列表推導,您可以隨時執行:

list(d.iteritems())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM