Python中Dictionary的替代方法 – 需要通过命名键引用值并按插入顺序迭代

Python中Dictionary的替代方法 – 需要通过命名键引用值并按插入顺序迭代,第1张

概述我正在使用 Python和Django,并将返回的JSON对象作为Python dictonaries,但我并不满足,因为我无法按插入顺序遍历我的字典元素. 如果我按如下方式创建字典: measurements = { 'units': 'imperial', 'fit': request.POST[ 'fit' ], 'height': request.POST[ 'height' 我正在使用 Python和Django,并将返回的JsON对象作为Python dictonarIEs,但我并不满足,因为我无法按插入顺序遍历我的字典元素.

如果我按如下方式创建字典:

measurements = {  'units': 'imperial','fit': request.POST[ 'fit' ],'height': request.POST[ 'height' ],'weight': request.POST[ 'weight' ],'neck': request.POST[ 'neck' ],# further elements omitted for brevity}

我可以尝试迭代它,如:

for k,v in measurements.iteritems():  print k,'corresponds to ',v

结果是:

shoulders corresponds to  shoulders_valweight corresponds to  weight_valheight corresponds to  height_valwrist corresponds to  wrist_val...

我也尝试使用sorted(),按字母顺序按键遍历我的元素

bicep corresponds to  bicep_valchest corresponds to  chest_valfit corresponds to  fit_valheight corresponds to  height_val...

我是Python的新手.我希望找到某种方法来通过命名键来引用我的字典元素,例如测量[‘units’],但仍然能够按照它们的创建顺序迭代这些元素.我知道那里有一个ordered dictionary module,但我想远离非标准包裹.任何其他标准Python数据结构(列表,数组等)是否允许我通过命名键迭代插入顺序和引用值?

解决方法 如果您使用的是py2.7或更新版本,则可以使用 collections.OrderedDict来保留插入顺序.这是标准库的一部分.对于旧版本,有一个 activestate recipe浮动,你可以复制和使用作为你的包/模块的一部分.否则,标准库中没有任何内容可以执行此 *** 作.

您可以自己子类化dict并使其成为记忆插入事物的顺序 – 例如将信息存储在列表中 – 但是当标准库中已存在某些新版本的内容以及您可以使用的配方时,这是过度的如果您想支持旧版本,可以随时使用复制/粘贴.

请注意,如果您将字典传递给它们,则接受字典(__init __,update)的字典方法将无法正确排序:

import collectionsdd = collections.OrderedDict({  'units': 'imperial','fit': 'fit','height': [ 'height' ],'weight': [ 'weight' ],'neck': [ 'neck' ],})print( dd )  #Order not preserved#Pass an iterable of 2-tuples to preserve order.ddd = collections.OrderedDict([  ('units','imperial'),('fit','fit'),('height',[ 'height' ]),('weight',[ 'weight' ]),('neck',[ 'neck' ]),])print( ddd ) #Order preserved
总结

以上是内存溢出为你收集整理的Python中Dictionary的替代方法 – 需要通过命名键引用值并按插入顺序迭代全部内容,希望文章能够帮你解决Python中Dictionary的替代方法 – 需要通过命名键引用值并按插入顺序迭代所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存