打印用.json()返回的dictionary对象中的所有值



我有一段代码,可以在来自网站的XHR响应上打印使用.json()方法返回的字典项:

teamStatDicts = responser[u'teamTableStats']
for statDict in teamStatDicts:
    print("{seasonId},{tournamentRegionId},{minsPlayed},"
            .decode('cp1252').format(**statDict))

这以以下格式打印:

9155,5,900
9155,5,820
...
...
...
9155,5,900
9155,5,820         

上面的方法工作得很好,只要字典中的键永远不会改变。然而,在我提交的一些XHR中,他们确实这样做了。有没有一种方法可以让我以与上面完全相同的格式打印所有字典值?我试过几件事,但都没有成功。

一般来说,给出一个dict,你可以做:

print(','.join(str(v) for v in dct.values()))

这里的问题是您不知道值的顺序。即CSV数据中的第一个值是季节Id吗?锦标赛是RegionId吗?扮演的牧师?还是你完全不知道的其他事情?

所以,我的观点是,除非你知道字段名,否则如果数据以普通dicts的形式出现,你就无法以任何可靠的顺序将它们放在字符串中。

如果您在其他地方使用json解码XHR,则可以将object_pairs_hook设置为OrderedDict:

from collections import OrderedDict
import json
...
data = json.loads(datastring, object_pairs_hook=OrderedDict)

现在,数据可以保证与数据字符串的顺序相同,但只有当数据字符串中的数据以特定方式排序时(通常情况并非如此),这才有帮助。

最新更新