如何在排序时获取字典值的长度

时间:2016-05-13 23:32:42

标签: python dictionary

所以我在控制台中打印了这本词典

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)

但该列表仅包含密钥

输出:

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

我还希望每个键旁边都有值的长度,所以我可以计算之后的百分比

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

我需要做出哪些改变才能实现这一目标?

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

你几乎就在那里。将li.append(k)更改为:

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

答案 2 :(得分: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)])