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

2024-09-29 00:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我把这本词典印在控制台上

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']
]

我需要做什么改变,才能做到这一点


Tags: thekeyintxtsourcefordocis
3条回答

你就快到了。将li.append(k)更改为:

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

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))

使用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)]) 

相关问题 更多 >