Python在格式化表达式中排序dict

时间:2017-07-12 15:55:58

标签: python string sorting dictionary

我有这种格式化表达式:

def __str__(self): 

        result = "\n".join({("{}: {}").format(key, self.__dict__[key]) for key, value in sorted(self.__dict__.items())}) 

        return result

代码运行但未排序。我不知道为什么它没有被分类。它返回下面的代码,每次都以不同的顺序返回。

currentPL: -438.627395715
portfolio: Balance: 10101
Transactions: 10
exitPrice: 1.14686
exitTime: 2017-07-12 06:0
entryTime: 2017-07-12 06:
currentlyOpen: True
entryPrice: 1.14686
direction: Long
currentPrice: 1.14188
transactionPL: 627.994644
currentPL100: -0.00434229
units: 88077.79030439684

portfolio: Balance: 10101
Transactions: 10
currentPrice: 1.14228
exitTime: 2017-07-12 06:0
entryTime: 2017-07-12 06:
currentlyOpen: True
entryPrice: 1.14686
direction: Long
transactionPL: 627.994644
currentPL100: -0.00399351
currentPL: -403.396279594
exitPrice: 1.14686
units: 88077.79030439684

...

1 个答案:

答案 0 :(得分:2)

你在一个集合(一个无序类型)上调用'\n'.join,它首先违背了订购的初始目的:

您可以使用列表(序列):

"\n".join([...])

或删除它们并直接使用生成器表达式。这是一个使用itertools.starmap

的非常易读的版本
from itertools import starmap

result = "\n".join(starmap("{}: {}".format, sorted(self.__dict__.items()))