2017-01-01 9 views
0
from __future__ import print_function 

Здравствуйте У меня есть следующий список с метками:Как получить следующий словарь?

label=['0','0','1','0','1','2','4','3','3','3','0'] 

У меня есть соответствующий список элементов:

elements=['element0', 'element1', 'element2', 'element3', 'element4', 'element5', 'element6', 'element7', 'element8', 'element9', 'element10'] 

Оба имеют одинаковую длину:

print("length label:",len(label),"length elements",len(elements)) 

выход :

length label: 11 length elements 11 

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

dict={'0':['element0', 'element1','element3','element10'],'1':[ 'element2','element4'],'2':['element7'], 
     '3':['element7', 'element8', 'element9'],'4':['element6']} 

Я пытаюсь использовать " списочные»следующим образом:

dict={} 
for i in range(0,len(elements)): 
    dict{i}=[#A list with all the elements that has the same label] 

Однако я хотел бы, чтобы оценить поддержку для достижения желаемого словаря, спасибо за поддержку, то MCVE является следующее:

from __future__ import print_function 

label=['0','0','1','0','1','2','4','3','3','3','0'] 
elements=['element0', 'element1', 'element2', 'element3', 'element4', 'element5', 'element6', 'element7', 'element8', 'element9', 'element10'] 

print("length label:",len(label),"length elements",len(elements)) 
dict={} 
+0

Пожалуйста, не используйте 'dict' в качестве имени переменной. Вы уничтожаете функцию с тем же именем. – dawg

+0

@dawg Спасибо за предложение. Я изменю это в будущем. – neo33

ответ

1

Вы можете использовать setdefault так:

>>> result={} 
>>> for k,v in zip(label,elements): 
... result.setdefault(k, []).append(v) 
... 
>>> result 
{'2': ['element5'], '0': ['element0', 'element1', 'element3', 'element10'], '3': ['element7', 'element8', 'element9'], '4': ['element6'], '1': ['element2', 'element4']} 
+0

Спасибо, действительно потрясающе этот код, – neo33

1
>>> from collections import defaultdict 
>>> mydict = defaultdict(list) 
>>> for i,j in zip(label, elements): 
... mydict[i].append(j) 

>>> print mydict 
defaultdict(<type 'list'>, {'1': ['element2', 'element4'], '0': ['element0', 'element1', 'element3', 'element10'], '3': ['element7', 'element8', 'element9'], '2': ['element5'], '4': ['element6']}) 

Поскольку вы хотели ключи для сортировки:

>>> from collections import OrderedDict 
>>> out_dict = OrderedDict() 
>>> for keys in sorted(mydict): 
... out_dict[keys] = mydict[keys] 

>>> print out_dict 
OrderedDict([('0', ['element0', 'element1', 'element3', 'element10']), ('1', ['element2', 'element4']), ('2', ['element5']), ('3', ['element7', 'element8', 'element9']), ('4', ['element6'])]) 
+0

Спасибо. Я очень ценю поддержку, спасибо за внимание. – neo33