2017-01-22 4 views
1

Учитывая словарь, как это:конвертировать словарь в список кортежей

dic = {(7, 3): 18.51, (1, 3): 18.751, (5, 6): 34.917, (9, 8): 18.9738} 

Я хочу, чтобы преобразовать его в список кортежей, как это:

my_list = [(7, 3, 18.51), (1, 3, 18.751), (5, 6, 34.917), (9, 8, 18.9738)] 

Я мог бы использовать цикл но мне интересно, есть ли аккуратный способ сделать это вместо циклов.

+0

Что вы пробовали и в чем проблема? '.items()' сам по себе дает вам большую часть пути. – jonrsharpe

ответ

5

Просто используйте list(..) на некоторых генератора:

my_list = list(key+(val,) for key,val in dic.items()) 

Это работает так:

  • list(..) принимает в качестве входных данных итератора и преобразует его в список; и
  • key+(val,) for key,val dic.items() - это генератор, который принимает пару значений ключа dic и преобразует его в кортеж, добавляя val к key.

Поскольку мы используем генератор для списка, мы можем упростить это с список понимания:

my_list = [key+(val,) for key,val in dic.items()] 

Наконец виду, что порядок, в котором кортежи происходят не фиксирован это потому, что порядок хранения элементов dict также не фиксируется.

+0

Нет, это не удовлетворит требования OP. Они имеют ключи с двумя кортежами и хотят получить три кортежа '(k1, k2, v)' – jonrsharpe

+1

@jonrsharpe: я вижу, возможно, более общий способ - использовать '+', поскольку возможно, что ключ содержит больше Предметы. –

+1

@ Don.C: см. Обновленный ответ. С благодарностью jonrsharpe за комментарий. –

 Смежные вопросы

  • Нет связанных вопросов^_^