我有一段代码,可以在来自网站的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)
现在,数据可以保证与数据字符串的顺序相同,但只有当数据字符串中的数据以特定方式排序时(通常情况并非如此),这才有帮助。