【发布时间】:2016-07-30 20:46:33
【问题描述】:
好吧,我试着简化一下:
第一个问题:是否认为字典比字典列表更合适?
第二个问题:我正在努力达到我的字典的第二级以正确的顺序打印出来。
我知道 dicts 没有排序,但我设法让 lambda 订购第一本词典以打印出 1-10 的注释。
现在我需要按照书写顺序打印第二个级别(ID 和 NAME 在 CONTENT 之前)。
任何帮助来控制这将不胜感激;)
annotations = {}
index = 1
for i in range(10):
annotations['Annotation #: '+str(i+1)+" --->>"] = {
'ID' : index,
'NAME:' : 'Tag Name',
'CONTENT:' : 'Note Content: This space will have a lot of text',
'URL:' : 'ref address',
'URL Info:' : 'url info',
}
index += 1
for key, values in sorted(annotations.items(), key=lambda x: x[1]):
print "\n"+key
for k, v in sorted(values.items(), key = lambda item: item[1]):
print k, v
输出:
Annotation #: 1 --->>
ID 1
CONTENT: Note Content: This space will have a lot of text
NAME: Tag Name
URL: ref address
URL Info: url info
#....... etc.. to:
Annotation #: 10 --->>
ID 10
CONTENT: Note Content: This space will have a lot of text
NAME: Tag Name
URL: ref address
URL Info: url info
【问题讨论】:
-
我不确定您要完成什么。请澄清
-
@Bharel 道歉我已经尝试清理一下问题。已经很晚了,我已经为此苦苦挣扎了一段时间。基本上我希望能够以正确的顺序打印 k、v.. 或单独成对地打印。那有意义吗?谢谢
-
这里的“正确”顺序是什么?目前,您正在使用每个字典的值,它给出了一个非常任意的顺序(碰巧与您的测试数据看起来不错只是偶然)。我怀疑
namedtuple对象列表对于您正在做的事情会更自然。 -
@Blckknght 哦,我确信
sorted(annotations.items(), key=lambda x: x[1]):帮助我获得了 1-10 的第一级字典。不是这样吗? -
@DavidFlamholc:这只是偶然。您的内部字典仅相差
ID值,所以这就是最终比较的结果。我认为,如果您对其他键有不同的值,那么您会得到相当随机的顺序。它也不适用于 Python 3,其中dict对象根本无法比较!
标签: python-2.7 dictionary lambda nested ordereddictionary