将python字典转换为类似JSON的对象

时间:2013-04-01 20:15:19

标签: python json dictionary

我知道这听起来好像我只需要使用标题中的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}

我在这里错过了什么?

2 个答案:

答案 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] + '}'

话虽这么说,这可能不是你想要的。正如其他人所指出的那样,“密钥”的重复性使得这一点难以解析。