我知道这听起来好像我只需要使用标题中的json.loads。但我认为这不是这种情况。或者至少我应该能够在没有任何库的情况下做到这一点(我想要理解这一点,而不仅仅是用库方法解决它)。
我目前所拥有的是一个字典,其中键是单词,值是这些单词的总计数:
myDict = { "word1": 12, "word2": 18, "word3": 4, "word4": 45 }
依旧......
我想要的是它变成类似下面的内容(以便我可以将它插入到scraperwiki数据存储区中):
myNewDict = {"entry": "word1", "count": 12, "entry": "word2", "count": 18, "entry": "word3", "count": 4, "entry": "word4", "count": 45}
我想我可以循环myDict
并在我新选择的键“entry”和“count”之后插入每个键/值(如此):
for k, v in myDict.iteritems():
myNewDict = { "entry": k, "count": v }
但有了这个,myNewDict
只保存最后的结果(所以只给我myNewDict={"entry":"word4", "total":45}
我在这里错过了什么?
答案 0 :(得分:2)
您需要的是list:
entries = []
for k, v in myDict.iteritems():
entries.append({ "entry": k, "count": v })
或者更好的列表理解:
entries = [{'entry': k, 'count': v} for k, v in myDict.iteritems()]
在更多细节中,您在循环的每次迭代中覆盖myDict
,每次都创建一个新的dict。如果您需要它,您可以将键/值添加到这样的字典中:
myDict['key'] = ...
..但在循环中使用,这将覆盖与'key'关联的先前值,因此使用列表。以同样的方式,如果你输入:
myNewDict = {"entry": "word1", "count": 12, "entry": "word2", "count": 18, "entry": "word3", "count": 4, "entry": "word4", "count": 45}
你真的得到了{'count': 45, 'entry': 'word4'}
!
注意: 我不知道输出数据的预期格式是什么,但是JSON方面,dicts列表应该是正确的(在JSON键中是唯一的我也相信)。
答案 1 :(得分:0)
虽然不清楚100%清除你想要的输出,但如果你只想要一个你上面概述的格式的字符串,你可以修改你的循环:
myCustomFormat = '{'
for k, v in myDict.iteritems():
myCustomFormat += '"entry": {0}, "count": {1},'.format(k, v)
# Use slice to trim off trailing comma
myCustomFormat = myCustomFormat[:-1] + '}'
话虽这么说,这可能不是你想要的。正如其他人所指出的那样,“密钥”的重复性使得这一点难以解析。