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)
有人可以帮助我吗?
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)