首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用OrderedDict()时打印"OrderedDict()“

在使用OrderedDict()时打印"OrderedDict()“
EN

Stack Overflow用户
提问于 2017-06-02 00:40:03
回答 2查看 1.7K关注 0票数 1

我正在尝试使用OrderedDict打印一个有序的字典,但是当我打印它时,"OrderedDict“也会打印出来。仅供参考,这只是一段代码,而不是整个代码。我能做些什么来解决这个问题呢?我使用的是Python 3.2

看起来像这样:

代码语言:javascript
复制
def returnAllStats(ints):
    choices = ["Yes","No"]
    dictInfo = {"Calories":ints[2], "Servings per Container":ints[0], "Amount per Serving":ints[1], "Total Fat":(ints[3]/100)*ints[2], "Saturated Fat":(ints[4]/100)*(ints[3]/100)*ints[2], "Cholesterol":ints[5], "Fiber":ints[6], "Sugar":ints[7], "Protein":ints[8], "Sodium":ints[9], "USA":choices[ints[10]], "Caffeine":ints[11]}
    dictInfo = collections.OrderedDict(dictInfo)
    return dictInfo

我在这个要写入的文本文件中得到了这个:

代码语言:javascript
复制
('snack', 'bananana')OrderedDict([('USA', 'No'), ('Sodium', 119), ('Calories', 479), ('Servings per Container', 7), ('Sugar', 49), ('Saturated Fat', 37.553599999999996), ('Total Fat', 234.71), ('Cholesterol', 87), ('Amount per Serving', 40), ('Fiber', 1), ('Caffeine', 7), ('Protein', 53)])

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-06-02 00:49:30

您有几个选项。

您可以使用列表理解并打印出来:

代码语言:javascript
复制
>>> od
OrderedDict([('one', 1), ('two', 2), ('three', 3)])
>>> [(k,v) for k,v in od.items()]
[('one', 1), ('two', 2), ('three', 3)] 

或者,知道顺序可能会改变,如果您想要输出,可以直接转换为字典:

代码语言:javascript
复制
>>> dict(od)
{'one': 1, 'two': 2, 'three': 3}

(对于Python3.6,是一个常规的dict does maintain order。使用Python 3.6,顺序不会改变。这很可能是未来的情况,但还不能保证。)

最后,您可以子类化OrderDict并将__str__方法替换为您想要的格式:

代码语言:javascript
复制
class Mydict(OrderedDict):
    def __str__(self):
        return ''.join([str((k, v)) for k,v in self.items()])

>>> md=Mydict([('one', 1), ('two', 2), ('three', 3)])   
>>> md     # repr
Mydict([('one', 1), ('two', 2), ('three', 3)])
>>> print(md)
('one', '1')('two', '2')('three', '3')

(如果您希望repr的输出不同,请更改__repr__方法...)

最后注意事项:

有了这个:

代码语言:javascript
复制
def returnAllStats(ints):
    choices = ["Yes","No"]
    dictInfo = {"Calories":ints[2], "Servings per Container":ints[0], "Amount per Serving":ints[1], "Total Fat":(ints[3]/100)*ints[2], "Saturated Fat":(ints[4]/100)*(ints[3]/100)*ints[2], "Cholesterol":ints[5], "Fiber":ints[6], "Sugar":ints[7], "Protein":ints[8], "Sodium":ints[9], "USA":choices[ints[10]], "Caffeine":ints[11]}
    dictInfo = collections.OrderedDict(dictInfo)
    return dictInfo

你实际上得到了一个无序的字典结果,因为你是从一个无序的字典文字创建OrderedDict。

相反,您可能希望这样做:

代码语言:javascript
复制
def returnAllStats(ints):
    choices = ["Yes","No"]
    return collections.OrderedDict([("Calories",ints[2]), ("Servings per Container",ints[0]), ("Amount per Serving",ints[1]), ("Total Fat",(ints[3]/100)*ints[2]), ("Saturated Fat",(ints[4]/100)*(ints[3]/100)*ints[2]), ("Cholesterol",ints[5]), ("Fiber",ints[6]), ("Sugar",ints[7]), ("Protein",ints[8]), ("Sodium",ints[9]), ("USA",choices[ints[10]]), ("Caffeine",ints[11])]}
    return dictInfo
票数 5
EN

Stack Overflow用户

发布于 2017-06-02 00:49:45

如果您不关心顺序,只需打印dict(YourOrderedDict),如果您关心顺序,您可以:

代码语言:javascript
复制
for key, value in yourOrderedDict.items():
    print(key, value)

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44312980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档