【发布时间】:2019-08-22 20:12:47
【问题描述】:
我有一个这样的字典:
exampleDict={'name': 'Example1', 'code': 2, 'price': 23, 'dimensions': [2,2]}
我想把dimensions的类型改成一个字符串,像这样:
exampleDict['dimensions'] = str(dict['dimensions'])
这很好用。但是想象一下我的exampleDict 中有嵌套的字典,而dimensions 在里面有点远。
我的猜测是递归地做一些事情。从我在这里搜索的内容来看,(例如this one或this one,他们在递归函数中使用yield,但我不确定为什么要使用它。
我正在考虑这样做:
def changeToStringDim(d):
if 'dimensions' in d:
d['dimensiones'] = str(d['dimensions'])
for k in d:
if isinstance(d[k], list):
for i in d[k]:
for j in changeToStringDim(i):
j[dimensions] = str(j['dimensions'])
我在这里找到了它,但不是分配j[dimensions]=str(j['dimensions']),而是分配了yield。但我对此进行了调整,它在像这个例子这样的字典中运行良好。
现在我正试图在一个嵌套中做到这一点。
exDict2={'name': 'example1',
'nesting': {'subnesting1': 'sub2',
'coordinates': [41.6769705, 2.288154]},
'price': 123123132}
}
使用相同的功能,但将其更改为坐标:
def changeToStringCoord(d):
if 'coordinates' in d:
d['coordinates'] = str(d['coordinates'])
for k in d:
if isinstance(d[k], list):
for i in d[k]:
for j in changeToStringDim(i):
j['coordinates'] = str(j['coordinates'])
它不会做任何事情。我已经调试过了,它只会通过name、nesting和price。 isinstance 工作不正常(或者工作正常,但我不完全理解它的方法)。
【问题讨论】:
-
为什么不只是像
d[k] = str(d[k])这样的东西?显示您想要的输出,因为目前您的描述令人困惑。 -
当然,我会立即编辑问题。但不是这样,因为我可以从参数接收字典。它可以在普通字典中包含
coordinates,也可以嵌套。所以我不知道我得到了什么字典!只有我需要改变它! @meowgoesthedog -
-
是的,但它不起作用。更改
dict将导致string indeces must be integersinisinstance(d[k], dict)@meowgoesthedog 出现错误 -
isinstance 需要一个类型,可以是
list、dict等等。我没有覆盖任何东西!它需要一个类型! @meowgoesthedog
标签: python dictionary