0

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

我在这里想念什么?

4

2 回答 2

2

你需要的是一个清单

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在循环的每次迭代中都被覆盖,每次都创建一个新的字典。如果你需要它,你可以像这样将键/值添加到字典中:

myDict['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 中的键也是唯一的)。

于 2013-04-01T20:19:13.050 回答
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] + '}'

话虽如此,这可能不是你想要的。正如其他人指出的那样,“键”的重复性会使解析变得有些困难。

于 2013-04-01T20:38:27.587 回答