【问题标题】:List of dictionaries: print readable output in python 2.7字典列表:在 python 2.7 中打印可读输出
【发布时间】:2016-03-21 16:48:00
【问题描述】:

我正在尝试从 3D 包中输出大量信息,并努力寻找一种在将数据同步到在线服务器之前将数据格式化为可读格式的好方法。

我希望获得有关如何获得此打印输出的任何建议:

dicts = [
    { "Annot1": 1, "NAME": "name", "TEXT": "text" },
    { "Annot2": 2, "NAME": "name", "TEXT": "text" },
    { "Annot3": 3, "NAME": "name", "TEXT": "text" },
    { "Annot4": 4, "NAME": "name", "TEXT": "text" }
]
print "\n \n".join(str(i)+" "+str(a) for i, a in enumerate(dicts, start=1))

看起来像这样的打印输出:

name = {
    "Annot1": 'name',
    "Annot2": 'name',
    "Annot3": 'name',
    "Annot4": 'name'
}
text = {
    "Annot1": 'text',
    "Annot2": 'text',
    "Annot3": 'text',
    "Annot4": 'text'
}
for key in sorted(name):
    print key
    print "NAME: %s" % name[key]
    print "TEXT: %s" % text[key]
    print

...这就是我想出来的

dicts = [
    { "Annotation_1": 1, "NAME": "name", "CONTENT": "text" },
    { "Annotation_2": 2, "NAME": "name", "CONTENT": "text" },
    { "Annotation_3": 3, "NAME": "name", "CONTENT": "text" },
    { "Annotation_4": 4, "NAME": "name", "CONTENT": "text" }
]

for d in dicts:
name = ''             # Or just name = 'Annot1' ?
for k in d.keys():
    if k.startswith('Annot'):
        name = k
        break
print d['Annotation'], name
print("NAME: %s" % d['NAME'])
print("CONTENT: %s" % d['CONTENT'])
print

这就是我打算从我的 3D 应用程序中输入稍后写入文件的数据的方式

dicts=[]

annotations={}
annotation[("Annotation_" + str(i))]
annotation['NAME'] = 'name'
annotation['CONTENT'] = 'content'
annotation['REF_URL'] = 'ref_url'
annotation['REF_INFO'] = 'ref_nfo' 

dicts.append(annotations)

这是我迄今为止根据我在这里得到的帮助想出的。

这是一个好方法吗? (到目前为止,最初的 for-range-loop 只是一个占位符)

annotations = []

for d in range(10):
    annotations.append(dict(
    [('ID', d+1),
    ('NAME', 'Tag Name '+str(d+1)),
    ('CONTENT', 'Note Content: This space will have a lot of text'),
    ('URL', 'ref address'),
    ('URL Info', 'url info')]
    ))

for i, a in enumerate(annotations):
    print "\nAnnotation:", "#"+str(i+1)
    print "NAME:", a['NAME']
    print "NOTE CONTENT:", a['CONTENT']
    print "Ref URL:", a['URL']
    print "URL Info:", a['URL Info']

【问题讨论】:

  • (1.) 您在第一个代码部分写了 4 次 "Annot1": 。错字? (2.) 名称 ("Annot1", ...) 必须从 dict 中提取还是可以生成 ("Annot" + str(i))?
  • @Norman,是的,很抱歉,确实是错别字。我现在已经纠正了它们。是的,它们以后都可以生成附加到它们的计数,但可能不需要,因为我可以在值中使用计数。
  • 没问题。但是,如果这些是拼写错误,那么您为什么接受@Mike 总是访问“Annot1”的答案? :-)
  • 我询问了有关生成“Annoti”键的问题,因为像我一样从字典中提取它们对于大型字典可能会变得很慢。此外,我们的答案实际上都没有像您的示例那样进行任何排序。字典列表是否已经按照您的示例进行了适当排序?
  • @Norman 非常感谢,这是一个很好的问题,关于我接受的答案:s 我在这里显然很新,我试图接受这两个答案,这显然是行不通的。我也确实玩过你的代码,并将它与我打算将字典放入列表的方式一起发布在下面。您将如何从字典中提取它们?我在我的初始代码中有“Annot1”等的原因是,如果我没有,我似乎每次插入一个新字典时都会覆盖一个字典。 ..?

标签: python list python-2.7 dictionary


【解决方案1】:

这个:

dicts = [
 { "Annot1": 1, "NAME": "name", "TEXT": "text" },
 { "Annot1": 2, "NAME": "name", "TEXT": "text" },
 { "Annot1": 3, "NAME": "name", "TEXT": "text" },
 { "Annot1": 4, "NAME": "name", "TEXT": "text" }
]

for d in dicts:
    print "Annot{}".format(d["Annot1"])
    for item in ["NAME", "TEXT"]:
        print '{}: {}'.format(item, d[item])
    print

给出这个输出:

Annot1
NAME: name
TEXT: text

Annot2
NAME: name
TEXT: text

Annot3
NAME: name
TEXT: text

Annot4
NAME: name
TEXT: text    

【讨论】:

    【解决方案2】:

    据我了解,您只是想要这个:

    for d in dicts:
        name = ''             # Or just name = 'Annot1' ?
        for k in d.keys():
            if k.startswith('Annot'):
                name = k
                break
        print(name)
        print("NAME: %s" % d['NAME'])
        print("TEXT: %s" % d['TEXT'])
        print()
    

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2013-02-16
      • 2014-07-28
      • 2018-10-12
      • 2017-04-26
      • 2019-06-27
      相关资源
      最近更新 更多