Учет списка для извлечения списка кортежей из словаря

Я хотел бы использовать понимание списка в следующем списке;

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: не может назначить литерал

Я не уверен, как получить две (конкретные) пары ключ / значение, используя понимание списка (при этом автоматически генерируется кортеж)?

4 Solutions collect form web for “Учет списка для извлечения списка кортежей из словаря”

 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 не содержит последовательностей для распаковки, но простых одиночных значений (dicts), вы должны ограничить их одной переменной. Затем, когда вы добавляете к сгенерированному списку, вы можете создать кортеж и делать все, что хотите, с текущим элементом.

Если вам не нужно использовать понимание списка, вы всегда можете:

 list(d.iteritems()) 
  • Есть ли более элегантный / питонический способ выразить эту конструкцию?
  • Определите дубликаты в списке списков и суммируйте их последние позиции
  • Python - Различия между элементами списка
  • Python append () vs. + operator в списках, почему они дают разные результаты?
  • Как сгладить список с различными типами данных (int, кортеж)
  • Преобразовать список в список кортежей python
  • Разделить список на более мелкие списки
  • «МОСТ-О» в python
  • Python - лучший язык программирования в мире.