2013-10-13 3 views
1

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

например. 1: [27,31]

23: ['20', '10', '3'], 
24: ['19', '16', '14', '6'], 
25: ['16', '5', '9', '24', '18', '15', '11', '12', '14', '5'], 
26: ['22', '15', '10', '6', '5', '4'], 
27: ['4'], 
28: ['27', '26', '20', '9', '22', '9', '25', '7'], 
29: ['15', '26', '16', '24', '4'], 
30: ['25', '16', '18', '21', '19', '4'], 
31: ['2'], 

ответ

2

Стандартная Хитрость заключается в том, чтобы использовать defaultdict для такого рода гистограммирования:

In [8]: d = {23: ['20', '10', '3'], 
    ...: 24: ['19', '16', '14', '6'], 
    ...: 25: ['16', '5', '9', '24', '18', '15', '11', '12', '14', '5'], 
    ...: 26: ['22', '15', '10', '6', '5', '4'], 
    ...: 27: ['4'], 
    ...: 28: ['27', '26', '20', '9', '22', '9', '25', '7'], 
    ...: 29: ['15', '26', '16', '24', '4'], 
    ...: 30: ['25', '16', '18', '21', '19', '4'], 
    ...: 31: ['2'],} 
In [9]: from collections import defaultdict 
In [10]: hist = defaultdict(list) 
In [11]: for k,v in d.iteritems(): 
    ...:  hist[len(v)].append(k) 
In [12]: hist 
Out[12]: defaultdict(<type 'list'>, {1: [27, 31], 3: [23], 4: [24], 
      5: [29], 6: [26, 30], 8: [28], 10: [25]}) 
0

Я думаю, что идея должна быть как:

keys = olddic.getallkeys() //which get all the keys 
declare newdic={}; 
iterate each of key in the olddic{ 
    array = olddic[eachkey] 
    newkey = array.size //the length/size 
    store newkey:array into newdic 
} 

Я пишу код замши для вы, но я думаю, что ваша работа заключается в написании фактического кода.

Использование библиотеки matplotlib для создания гистограммы позволит сэкономить ваши дни!

http://matplotlib.org/

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