-1

我正在创建一个书籍索引,我已经阅读了一个包含单词及其页面的文本文件,并创建了这个名为“index”的字典

index={'spanning tree': {16, 99}, 'vertex': {54}, 'depth first search': {55}, 'shortest path': {55}, 'connected': {28, 54}, 'neighbor': {64, 27, 77}, 'path': {72, 19}}

现在我想按字母顺序排列键并将数字按时间顺序排列 - 我可以以字典格式执行此操作,还是需要将其转换为列表或字符串?

我试过这样做...

ind=list(index)
ind.sort()
return ind

我得到了一个按字母顺序排列的键列表,但我不确定如何处理这些数字,因为它们是成组的......

有什么建议吗?

4

2 回答 2

2

如果要应用排序,您也必须将集合转换为列表。

sorted()函数为您提供任何可迭代的排序列表,让您跳过一个步骤:

for key in sorted(index):
    print('{:<20}{}'.format(key, ', '.join(str(i) for i in sorted(index[key]))))

简短演示:

>>> sorted(index)
['connected', 'depth first search', 'neighbor', 'path', 'shortest path', 'spanning tree', 'vertex']
>>> sorted(index['connected'])
[28, 54]
>>> for key in sorted(index):
...     print('{:<20}{}'.format(key, ', '.join(str(i) for i in sorted(index[key]))))
... 
connected           28, 54
depth first search  55
neighbor            27, 64, 77
path                19, 72
shortest path       55
spanning tree       16, 99
vertex              54
于 2013-07-24T21:32:52.907 回答
0

您可以使用标准库中的集合模块,该模块的OrderedDict类型只是dict记住插入顺序的类型。

如果您想要按字母顺序排列的字典,其中您的值是有序列表:

sorted_index = collections.OrderedDict(sorted(zip(index, map(sorted, index.values()))))

由于这有点难看,您可以将其扩展为。

sorted_items = sorted(index.items())
sorted_items = [(k, sorted(v)) for k, v in sorted_items]
sorted_index = collections.OrderedDict(sorted_items)
于 2013-07-24T22:08:24.717 回答