【发布时间】:2016-02-22 23:10:03
【问题描述】:
我期待一个字典列表,但字典深度未知。它可以是list of dict of dict 或list dict of dict of dict...。但输出来自unicode。所以我需要删除你的 unicode 并需要更改它string
json_result = [{u'NI': {u'Li': u'0', u'Receive': u'3', u'Slot': u'0002',u'PCID': u'165F', u'PCIV': u'14e4', u'LinkD': u'0','Per': u'44', u'Max': u'0', u'Pro':u'Br', u'Nic': u'3',u'Co': u'1.36', u'lis': [u'1',u'2']}}]
def abc(json_result):
temp_res = [{}]
for key, keyv1 in json_result.iteritems():
if type(keyv1) is dict:
temp_res[0][str(key)] = {}
abc(keyv1)
temp_res[0].update({key:keyv1})
elif type(keyv1) is list:
for i in xrange(len(keyv1)):
keyv1[i] = str(keyv1[i])
key = str(key)
else:
key = str(key)
keyv1 = str(keyv1)
return temp_res
ret = abc(json_result[0])
print ret
输出
[{'NI': {u'Slot': u'0002', u'Receive': u'3', u'lis': ['1', '2'], 'Per': u'44', u'Li': u'0', u'LinkD': u'0', u'PCIV': u'14e4', u'Co': u'1.36', u'Nic': u'3', u'Pro': u'Br', u'PCID': u'165F', u'Max': u'0'}}]
如果您观察输出,则第一个键NI 已转换为string,dict 中的list 也转换为string。但其他人不是,为什么?
当我调试代码时,我可以看到,它正在更改为else 中的string,但在最终输出中它没有反映为什么?
还有一件事pycharmshadows else 部分告诉我们,局部变量key and keyv1 没有被使用.. 为什么?
【问题讨论】:
-
为什么还要这样做?如果你有非 ascii 字符,使用 str 不会很好地结束,就像 idjaw 指出的那样,你永远不会真正使用 key 或 key1
-
@PadraicCunningham:我认为
recursion是找出字典中depth的唯一方法。这就是我遵循这种方式的原因。如果您有其他解决方法,请指导, -
@RasmiRanjanNayak,如果有点过于复杂,递归很好,我会更关心在 unicode 上调用 str,你到底想做什么?
标签: python dictionary unicode pycharm