gpt4 book ai didi

Python,对字典进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:12 24 4
gpt4 key购买 nike

我正在用 python 编写字典。我正在尝试按字母顺序对其进行排序并将其拆分以使其看起来稍微好一些。这是我目前在字典中的代码。

authorentry = {'author':  name, 'date': datef , 'path': path_change , 'msg' : xmlMsgf }           
if not name in author:
author[ name ] = []

author[ name ].append( authorentry )

if not authorentry in author.items():
author['author'] = [authorentry]

print sorted (author.keys()), sorted (author.values())

现在我想要它做的是根据作者和日期按排序顺序打印出字典。并对其进行拆分和修改,因此如果可能的话,它不会包含所有那些逗号和“你”。关于如何实现它的任何想法?

这是我按原样打印时的样子。

我希望作者首先出现在列表中而不是日期。如果可能的话,我希望它按字母顺序排列,并删除条目中的逗号以更清晰地打印出来。是否可以?

[[{'date': ['06-08-2012 09:01:52 PM'], 'path': [u'/branches/Patch_4_2_0_Branch'], 'msg': ['none', u'PATCH_BRANCH:N/A\nBUG_NUMBER:N/A\nFEATURE_AFFECTED:N/A\nOVERVIEW:N/A\nAdding the SVN log size requirement to the branch \n'], 'author': u'glv'}], [{'date': ['06-08-2012 09:01:52 PM'], 'path': [u'/branches/Patch_4_2_0_Branch'], 'msg': ['none', u'PATCH_BRANCH:N/A\nBUG_NUMBER:N/A\nFEATURE_AFFECTED:N/A\nOVERVIEW:N/A\nAdding the SVN log size requirement to the branch \n'], 'author': u'glv'}]]

更新:截至目前,我可以将作者分组在一起,但出于某种原因,我不仅无法将其按字母顺序排列,我什至无法让作者成为列表中的第一人,显示的内容与此类似:

 Date: 06-08-2012 08:56:09 PM

Changes by : glv

Comments: PATCH_BRANCH:N/A BUG_NUMBER:N/A FEATURE_AFFECTED:N/A OVERVIEW:N/A Adding the svn commit line requrement

Directory Location: /trunk

我想要的订购方式更像是这样。

  Changes by : glv
Date: 06-08-2012 08:56:09 PM
Directory Location: /trunk
Comments: PATCH_BRANCH:N/A BUG_NUMBER:N/A FEATURE_AFFECTED:N/A OVERVIEW:N/A Adding the svn commit line requrement

我尝试了 OrderedList 以查看是否可以让它以这种方式工作,但到目前为止没有运气或成功。有什么我想念的吗?

最佳答案

如果您只是关心为了用户可读性而呈现此信息,请使用 pprint 模块。

import pprint
pprint.pprint(author)

假设 author 是一个 dict。或者使用 pprint.pformat 获取一个字符串,您可以进一步操作/清理该字符串,例如print pprint.pformat(author).replace(',','') 删除逗号。

您还应该知道 dict 不能重新排序,因为它们本质上是一个哈希表,其键是哈希(就像一个集合)。

您也可以尝试使用 collections.OrdererdDict:

from collections import OrdererdDict
sorted_author = OrderedDict(sorted(author.iteritems()))

更新:奇怪的是你仍然遇到这个问题。我只是给你一些肯定会工作的代码,你可以从那里调整它:

def format_author(author):
tups = sorted(author.iteritems()) # alphabetical sorting
kmaxlen = max([len(k) for k, v in tups]) # for output alignment

# some custom rearrangement. if there is a 'msg' key, we want it last
tupkeys = [k for k, v in tups]
if 'msg' in tupkeys:
msg_tup = tups.pop(tupkeys.index('msg'))
tups.append(msg_tup) # append to the end
# alternatively tups.insert(0, msg_tup) would insert at front

output = []

for k, v in tups:
# dress our values
if not v:
v = ''
elif isinstance(v, list):
if len(v) == 1:
v = v[0]
if len(v) == 2 and v[0] in [None, 'none', 'None']:
v = v[1]
v = v.strip()
output.append("%s: %s" % (k.rjust(kmaxlen), v))
return "\n".join(output)

然后你可以这样做:

author = {'date': ['06-08-2012 09:01:52 PM'], 'path': [u'/branches/Patch_4_2_0_Branch'], 'author': u'glv', 'msg': ['none', u'blah blah blah \n']}
s = format_author(author)
print s

并得到这样的输出:

author: glv
date: 06-08-2012 09:01:52 PM
path: /branches/Patch_4_2_0_Branch
msg: blah blah blah

关于Python,对字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12266208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com