有序字典未排序

KSM*_*KSM 2 python ordereddictionary

我一直在网上研究一种创建有序字典的简单方法,并使用 OrderedDict 及其更新方法,我已经成功实现了一次,但是现在代码往往不会对添加的术语进行排序,例如放置的项目是:

      Doc1:  Alpha, zebra, top 
      Doc2:  Andres, tell, exta
      Output: Alpha, top, zebra, Andres, exta, tell
      My goal is to have Alpha, Andres......, top, zebra
Run Code Online (Sandbox Code Playgroud)

这是代码:

    finalindex= collections.OrderedDict()
    ctr=0
    while ctr < docCtr:
        filename = 'dictemp%d.csv' % (ctr,)
        ctr+=1
        dicTempList = io.openTempDic(filename)
        print filename
        for key in dicTempList:
            if key in finalindex:
                print key
                for k, v in finalindex.items():
                newvalue =  v + "," + dicTempList.get(key)
                finalindex.update([(key, newvalue)])
            else:
                finalindex.update([(key, dicTempList.get(key))])
    io.saveTempDic(filename,finalindex)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

Aar*_*all 5

OrderedDicts 记住它们的创建顺序。如果您希望对其进行排序,则需要在创建它们时进行排序。以下是如何对 a 进行排序OrderedDict一个取自文档的示例

from collections import OrderedDict

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
sorted_dict = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
Run Code Online (Sandbox Code Playgroud)

这将适用于另一个有序的 dict,为了让读者清晰起见,我更喜欢从中导入模块和引用函数和类,所以这是以稍微不同的风格完成的,但同样,要对其进行排序,您需要进行排序在创建新的之前OrderedDict

import collections
ordered_dict=collections.OrderedDict()
ordered_dict['foo'] = 1
ordered_dict['bar'] = 2
ordered_dict['baz'] = 3
sorted_dict = collections.OrderedDict(sorted(ordered_dict.items(), 
                                             key=lambda t: t[0]))
Run Code Online (Sandbox Code Playgroud)

和 sorted_dict 返回:

OrderedDict([('bar', 2), ('baz', 3), ('foo', 1)])
Run Code Online (Sandbox Code Playgroud)

如果 lambdas 令人困惑,您可以使用 operator.itemgetter

import operator
get_first = operator.itemgetter(0)
sorted_dict = collections.OrderedDict(sorted(ordered_dict.items(), 
                                             key=get_first))
Run Code Online (Sandbox Code Playgroud)

我正在使用关键参数来演示它们的用法,以防您想按值排序,但 Python按第一个元素然后第二个元素dict.items()对元组(通过listPython 2 中的 a和 Python 3 中的迭代器提供迭代)进行排序,所以你甚至可以这样做并得到相同的结果:

sorted_dict = collections.OrderedDict(sorted(ordered_dict.items()))
Run Code Online (Sandbox Code Playgroud)