2016-08-03 4 views
2

У меня есть что-то вроде следующего словаря:Python операция словаря

dict = {} 
dict[(-1,"first")]=3 
dict[(-1,"second")]=1 
dict[(-1,"third")]=5 
dict[(0,"first")]=4 
dict[(0,"second")]=6 
dict[(0,"third")]=7 
dict[(1,"first")]=34 
dict[(1,"second")]=45 
dict[(1,"third")]=66 
dict[(2,"first")]=3 
dict[(2,"second")]=1 
dict[(2,"third")]=2 

То, что я хотел бы в настоящее время является ДИКТ со следующей структурой: Ключей «первым» «вторым» «третьи», значения являются числа -> старт: если первая запись в кортеже> 0

dict_1 ={"first": [4,34,3], "second": [6,45,1], "third": [7,66,2]} 

Я пробовал с:

for key, value in dict.iteritems(): 
    if key[0] <=0: 
.. 
.. 

Но это изменяет порядок и не работает должным образом. Было бы здорово, если бы кто-нибудь предложил простой метод обработки таких вещей.

Большое спасибо

+3

Словари не имеют заказа. См. Http://stackoverflow.com/questions/1867861/python-dictionary-keep-keys-values-in-same-order-as-declared – cdarke

+6

Вы действительно не должны называть свой dict 'dict'. – khelwood

ответ

2

Почему вы хотите оставить свой заказ? Я предлагаю вам использовать этот вид петли

dict_r = {} 
dict_r["first"] = [] 
dict_r["second"] = [] 
dict_r["third"] = [] 
for i in range (0,3): 
    dict_r["first"].append(dict[i,"first"]) 
    dict_r["second"].append(dict[i,"second"]) 
    dict_r["third"].append(dict[i,"third"]) 

Update

, если вы не знаете, сколько элементов в Словаре

dict_r = {} 
dict_r["first"] = [] 
dict_r["second"] = [] 
dict_r["third"] = [] 


for key, value in dict.iteritems(): 
    if key[0] <=0: 
     dict_r[key[1]].append(value) 
1

я сделаю что-то подобное с использованием defaultdict для удобства:

from collections import defaultdict 
new_dict = defaultdict(list) 

for (x,k),v in sorted(old_dict.items()): # iterating over the sorted dictionary 
    if x >= 0: 
     new_dict[k].append(v) 

dict(new_dict) 
#output: 
{'second': [6, 45, 1], 'first': [4, 34, 3], 'third': [7, 66, 2]} 

BTW, не назовите ваш словарь dict, он затеняет python dict тип.

0
dict = {} 
dict[(-1,"first")]=3 
dict[(-1,"second")]=1 
dict[(-1,"third")]=5 
dict[(0,"first")]=4 
dict[(0,"second")]=6 
dict[(0,"third")]=7 
dict[(1,"first")]=34 
dict[(1,"second")]=45 
dict[(1,"third")]=66 
dict[(2,"first")]=3 
dict[(2,"second")]=1 
dict[(2,"third")]=2 

dict_1 = {} 
for num,txt in sorted(dict.keys()): 
    if num >= 0: 
     val = dict[(num,txt)] 
     if txt in dict_1: 
      dict_1[txt].append(val) 
     else: 
      dict_1[txt] = [val] 

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