2014-10-03 4 views
0

Я начинаю с python. У меня есть список. Я хочу перебрать значения списка и добавить каждый из значений словаря соответственно. Это выглядело просто, но я попытался написать несколько циклов, но никто не работал на меня. Например,Python Dictionary (редактировать только значения словаря)

Note : Total number of element in My_list and total number of key:value pairs in My_Dict are same. 

    My_list= [ [A,B,C], [D,E,F], [I,J,K] ] 

    My_dict= { 'Apple'= {'Color'=[data1,data2]} , 'Orange'= {'Color'=[data3,data4]}, 'Peach'={ 'color'=[data5,data6]} } 

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

New_Dict= { 'Apple'= { 'Name'=[A,B,C], 'Color'=[data1,data2]} , 'Orange'= { 'Name'=[D,E,F] ,'Color'=[data3,data4]}, 'Peach'={ 'Name'=[I,J,K], 'color'=[data5,data6]} } 
+0

где ваша петля? – goncalopp

+1

Как узнать, какой список, например. '[A, B, C]' идет с каким ключом в 'NewDict'? – CoryKramer

+0

Из примера и вашего комментария о количестве элементов dict и списка для соответствия, похоже, вы ожидаете, что объект 'My_dict' будет поддерживать порядок своих ключей. Python dicts этого не делают - они возвращают свои пары ключ/значение в произвольном порядке. Поскольку вы используете 2,7, вы можете использовать 'collections.OrderedDict' для поддержания порядка. –

ответ

1

Как указывается в комментариях, вы должны использовать collections.OrderedDict вместо регулярного dict для того, чтобы сохранить порядок my_dict. Оттуда вы можете использовать zip перебрать ключей в my_dict и элементы my_list в ногу, а затем вставьте каждый элемент в my_list на соответствующее место в OrderedDict:

from collections import OrderedDict 

my_list = [['A', 'B', 'C'], ['D', 'E', 'F'], ['I', 'J', 'K']] 
my_dict = OrderedDict([ 
    ('Apple', {'Color' : ['data1','data2']}), 
    ('Orange', {'Color' : ['data3','data4']}), 
    ('Peach', { 'color' : ['data5','data6']}), 
]) 

for key, name in zip(my_dict, my_list): 
    my_dict[key]['Name'] = name 

print(my_dict) 

Выход:

OrderedDict([('Apple', {'Color': ['data1', 'data2'], 'Name': ['A', 'B', 'C']}), ('Orange', {'Color': ['data3', 'data4'], 'Name': ['D', 'E', 'F']}), ('Peach', {'color': ['data5', 'data6'], 'Name': ['I', 'J', 'K']})]) 
Смежные вопросы