【问题标题】:Decomposition and decoding of nested dictionary/json嵌套字典/json的分解和解码
【发布时间】:2010-11-27 12:44:08
【问题描述】:

在我的应用程序中,我连接到一个服务器,该服务器返回一些类似于字典字典的 json 样式 unicode 字符串。因此,我想得到一个以id 作为键和 unicode 值的分级字典,如下所示:

{'1': u'autos','3': u'cities'}

所以我使用内置的 json 模块加载响应:

>>> jsonData = json.loads(data)
>>> jsonData
{u'1': {u'id': u'1', u'name': u'autos'}, u'3': {u'id': u'3', u'name': u'cities'}, u'2': {u'id': u'2', u'name': u'business'},}
>>> type(jsonData)
<type 'dict'>

您可以在此处查看返回的对象。然后我应该分解它以摆脱父字典。最后对 id 进行编码。我找到了两种方法来进行编码。一:

>>> import unicodedata
>>> unicodedata.normalize('NFKD', data).encode('ascii','ignore')

第二个:

>>> data.encode('ascii','ignore')

我应该怎么做这个任务,尤其是分解?

【问题讨论】:

  • “摆脱父字典”是什么意思?你能指定完成后的样子吗?

标签: python json encoding dictionary decomposition


【解决方案1】:

这应该可行:

outputdata = {}
for id, stuff in jsonData.iteritems():
    outputdata[id.encode("ascii")] = stuff[u"name"]

您也可以使用生成器表达式,如 dugres 的回答。

【讨论】:

  • dict((i.encode("ascii"),s[u"name"]) for i,s in jsonData.items()) 会更短(但基本相同)。
  • @Sven:如果您使用的是 2.7/3.1,它会更短:{i.encode("ascii"): s[u"name"] for i, s in jsonData.items()}。但我想我会坚持基础;-)
  • 哦,我刚刚注意到在 2.x 的情况下我们没有使用 iteritems(),但应该有...
【解决方案2】:
decomp=dict((v['id'], v['name']) for v in jsondata.values())

【讨论】:

  • 不能使用生成器,因为 id 与实际位置无关。还是谢谢你的回答。
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2021-07-24
  • 2017-11-27
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多