2012-04-10 3 views
0

Так что у меня этот словарь:(Python) Преобразование словаря в список?

ScoreDict = {"Blue": {'R1': 89, 'R2': 80}, 
      "Brown": {'R1': 61, 'R2': 77}, 
      "Purple": {'R1': 60, 'R2': 98}, 
      "Green": {'R1': 74, 'R2': 91}, 
      "Red": {'R1': 87, 'Lon': 74}} 

Есть ли способ, как я могу преобразовать этот словарь в список, как это:

ScoreList = [['Blue', 89, 80], ['Brown', 61, 77], 
['Purple', 60, 98], ['Green', 74, 91], ['Red', 87, 74]] 

Я не слишком хорошо знаком со словарями, так что я на самом деле нужна помощь здесь. Заранее спасибо!

+2

Имеет ли значение порядок цифр? – agf

ответ

1

Вы можете попробовать сделать это:

ScoreList = [[key] + value.values() for key, value in ScoreDict.iteritems()] 

В виде петли он, вероятно, имеет больше смысла:

ScoreList = [] 

for key, value in ScoreDict.iteritems(): 
    temp = [] 

    temp.append(key) 
    temp.extend(value.values()) 

    ScoreList.append(temp) 

Основной проблемой вы столкнетесь в том, что словари не являются приказал. Элементы индексируются своими хешами, что означает, что value.values() не вернет значения словаря в любом конкретном порядке.

+0

Спасибо @Blender! Это прекрасно работает! В этом контексте порядок не имеет значения, так что все хорошо! – DarsAE

1

Не надежно. Нет причин, по которым ключи оставались в этом порядке, поэтому невозможно гарантировать, что вы можете получить этот список из этого словаря.

+0

Я собирался сказать, что ключи можно сортировать, но потом я увидел, что не все вложенные ключи ключей были идентичны. –

+0

OrderedDict из коллекции коллекций может использоваться для получения инициализированного порядка ключей в словаре, да? – fixxxer

2

Не сохраняет номера в первоначальном порядке, так как я не вижу там никакого логического порядка.

>>> ScoreDict = {"Blue": {'R1': 89, 'R2': 80}, 
      "Brown": {'R1': 61, 'R2': 77}, 
      "Purple": {'R1': 60, 'R2': 98}, 
      "Green": {'R1': 74, 'R2': 91}, 
      "Red": {'R1': 87, 'Lon': 74}} 
>>> [[k]+i.values() for k,i in ScoreDict.iteritems()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Green', 74, 91], ['Red', 74, 87], ['Purple', 60, 98]] 
+0

Корреспондент с ''Red'' неверен. –

+1

Я опубликовал аналогичное, но менее элегантное решение, я думаю, важно отметить, что это ** не работает **, если вы рассчитываете, что 2-й и 3-й пункты списка будут в определенном порядке. –

+2

Отмечено: я сказал это наверху. – jamylak

0

(Это чрезвычайно хрупкая!)

ScoreList = [[colour, rs["R1"], rs["R2" if "R2" in rs else "Lon"]] for colour, rs in ScoreDict.items()] 

Это проходит через каждую пару ключ-значение в ScoreDict и создает список из него. Важная функция здесь .items() (documentation).

(Обратите внимание, что в Python 2.x .iteritems следует использовать вместо .items, чтобы избежать построения промежуточного списка.)

+0

'ScoreDict ['Red']' не имеет записи ''R2''. –

+0

@ IgnacioVazquez-Abrams, ах, не заметил этого! Благодаря :) – huon

1

Вообще говоря, если вы используете обычный словарь, порядок не будет сохранен. Если вы хотите, чтобы заказ был сохранен, вам лучше использовать Упорядоченный дикт.

Первая Предполагая, что вам не нужно, чтобы сохранился порядок, то вы можете сделать что-то вроде этого, чтобы получить требуемый выход

>>> [([k]+v.values()) for k,v in ScoreDict.items()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Green', 74, 91], ['Red', 74, 87], ['Purple', 60, 98]] 
>>> 

Но если вы серьезно относитесь к порядку, исходные данные должны быть организованный как OrderedDict. А вот пример, чтобы сделать это

>>> ScoreDict 
OrderedDict([('Blue', OrderedDict([('R1', 89), ('R2', 80)])), ('Brown', OrderedDict([('R1', 61), ('R2', 77)])), ('Purple', OrderedDict([('R1', 60), ('R2', 98)])), ('Green', OrderedDict([('R1', 74), ('R2', 91)])), ('Red', OrderedDict([('R1', 87), ('R2', 74)]))]) 

и вы можете легко увидеть, как применение вышеуказанного раствора даст тот же результат, но с сохранением порядка

>>> [([k]+v.values()) for k,v in ScoreDict.items()] 
[['Blue', 89, 80], ['Brown', 61, 77], ['Purple', 60, 98], ['Green', 74, 91], ['Red', 87, 74]] 
Смежные вопросы