2016-05-13 3 views
0

Так я этот словарь напечатан в консолиКак получить длину значения словаря при сортировке

source-document01321.txt 
1 {'startPos': '216', 'endPos': '225'} 
2 {'startPos': '3678', 'endPos': '3687'} 
this is the length 2 
source-document01323.txt 
1 {'startPos': '2880', 'endPos': '2889'} 
2 {'startPos': '6042', 'endPos': '6351'} 
3 {'startPos': '14232', 'endPos': '14241'} 
4 {'startPos': '16956', 'endPos': '16965'} 
5 {'startPos': '22626', 'endPos': '22635'} 
6 {'startPos': '24708', 'endPos': '24717'} 
7 {'startPos': '34824', 'endPos': '34833'} 
8 {'startPos': '36444', 'endPos': '36453'} 
9 {'startPos': '38064', 'endPos': '38073'} 
this is the length 9 
source-document01259.txt 
1 {'startPos': '3528', 'endPos': '3537'} 
2 {'startPos': '10428', 'endPos': '10437'} 
3 {'startPos': '12426', 'endPos': '12435'} 
4 {'startPos': '18450', 'endPos': '18459'} 
5 {'startPos': '24864', 'endPos': '24873'} 
6 {'startPos': '27036', 'endPos': '27213'} 
7 {'startPos': '30588', 'endPos': '31167'} 
8 {'startPos': '34824', 'endPos': '34833'} 
9 {'startPos': '44466', 'endPos': '44475'} 
10 {'startPos': '45492', 'endPos': '45501'} 
11 {'startPos': '46644', 'endPos': '46653'} 
12 {'startPos': '51732', 'endPos': '51741'} 

используя этот код

for key, value in doc_dict.iteritems(): 
    print key 
    for k, v in value.iteritems(): 
     print k,v 
    print "this is the length ", len(value) 

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

li = [] 
for k in sorted(doc_dict, key=lambda k: len(doc_dict[k]), reverse=True)[:5]: 
    li.append(k) 
pprint(li) 

но это l IST содержит только ключи

выход:

['source-document01348.txt', 
'source-document01389.txt', 
'source-document01253.txt', 
'source-document01306.txt', 
'source-document01255.txt'] 

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

т.е.

[ 
['source-document01348.txt', '40'], 
['source-document01389.txt', '35'] 
] 

какое изменение мне нужно сделать, чтобы это произошло?

+0

Мне интересно, если мой код работает. Не могли бы вы протестировать его и дать мне обратную связь? thx – SparkAndShine

+0

Hey @sparkandshine сообщит вам через некоторое время спасибо –

+0

u может забыть проверить мой код. Я жду ответа ура. – SparkAndShine

ответ

3
for k in sorted(doc_dict, key=lambda k: len(doc_dict[k]), reverse=True)[:5]: 
    li.append((k,len(doc_dict[k]))) 

Просто сделайте расчет снова, присоединяя кортеж (key, len(value))

0

Используйте sorted(doc_dict.items(), ...,

for k, v in sorted(doc_dict.items(), key=lambda x: len(x[0]), reverse=True)[:5]: 
    li.append([k, len(v)]) 
1

Вы почти там. Изменение li.append(k) на:

li.append([k,len(doc_dict[k])])

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