鱼C论坛

 找回密码
 立即注册
查看: 2388|回复: 10

[已解决]有关Python key 和 value 的问题求助

[复制链接]
发表于 2018-8-2 10:26:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何实现
   


diot = {'a':{'b':{'c'}},'d':{'e'}}
      






a --> b --> c
d --> e
   


的转变呢
最佳答案
2018-8-5 17:29:50
本帖最后由 无符号整形 于 2018-8-5 17:32 编辑
哈哈哈哈哈hhhh 发表于 2018-8-5 11:35
不好意思。我可能没有表述清楚,我的具体问题是这样的:
有这样一个字典:{a:{b:c},d:{e}}
根据字典的级 ...


抱歉,我看错了格式,我还以为是{a:{b:{c}},d:{e}}的形式。
  1. def f(key):
  2.     for each in key:
  3.         if isinstance(key[each],dict):#假如找到下一个字典
  4.             print(each,end='-->')#打印
  5.             f(key[each])#递归查找
  6.         elif isinstance(key[each],str):
  7.             print(each,end='-->')#打印(这时候要打印两个东西,一个是标签(上面检测不到,因为这个标签(key[each])指向的对象不是字典,另外一个是字符串本身)
  8.             print(key[each])

  9. f({'a':{'b':'c'},'d':'e')
复制代码

输出
  1. a-->b-->c
  2. d-->e
复制代码

真的很抱歉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-2 10:37:13 | 显示全部楼层
>>> diot = {'a':{'b':{'c'}},'d':{'e'}}
>>> diot['a']['b']
{'c'}
而{'e'}不是字典是集合。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 10:58:33 | 显示全部楼层
本帖最后由 无符号整形 于 2018-8-2 11:32 编辑
  1. def f(key):
  2.     for each in key:
  3.         try:#小心!假如只是{'a'}(集合)的话会出错
  4.             if isinstance(key[each],dict):#假如找到下一个字典
  5.                 print(each,end='-->')#打印
  6.                 f(key[each])#递归查找
  7.                 continue
  8.             elif isinstance(key[each],set):#假如找到集合(预示着树到了尽头)另:{'c'}是集合,而且不能key[each],这样得不到任何东西
  9.                 print(each,end='-->')#打印(这时候要打印两个东西,一个是集合的标签(上面检测不到,因为这个标签(key[each])指向的对象不是字典,另外一个是集合本身)
  10.                 print(str(key[each])[2:-2])#打印集合外加换行(记住要打印第一个元素)
  11.                 return#返回
  12.         except TypeError:#假如只是{'a'}(集合)
  13.             print(each)#打印集合内的元素,你可能会奇怪为什么这里打印each就行了,因为假如key是个集合(例如{'a'})的话它会被送进for(送代集合),然而TypeError就发生在第四行(用字典的方式访问集合),这时each已经被填入了集合的第一个元素(例如'a'),所以这时访问each即可访问到集合内的元素。
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 10:59:33 | 显示全部楼层
直接用键值连续索引即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-5 09:43:23 | 显示全部楼层
BngThea 发表于 2018-8-2 10:59
直接用键值连续索引即可

不好意思,打扰您了。可以详细给我讲一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-5 09:44:09 | 显示全部楼层

不好意思,我eclipse运行不出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 11:30:48 | 显示全部楼层
哈哈哈哈哈hhhh 发表于 2018-8-5 09:44
不好意思,我eclipse运行不出来。

您是否没有调用它?
您需要给f函数传入一个字典。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-5 11:35:22 | 显示全部楼层
无符号整形 发表于 2018-8-5 11:30
您是否没有调用它?
您需要给f函数传入一个字典。

不好意思。我可能没有表述清楚,我的具体问题是这样的:
有这样一个字典:{a:{b:c},d:e}
根据字典的级别
输出   a -- >b -- >c
         d -- >e
是有关嵌套字典逐级打印的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 11:37:15 | 显示全部楼层
哈哈哈哈哈hhhh 发表于 2018-8-5 11:35
不好意思。我可能没有表述清楚,我的具体问题是这样的:
有这样一个字典:{a:{b:c},d:e}
根据字典的级 ...

您可以将这个字典作为参数传入f,它会将它按您的要求打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-5 17:29:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 无符号整形 于 2018-8-5 17:32 编辑
哈哈哈哈哈hhhh 发表于 2018-8-5 11:35
不好意思。我可能没有表述清楚,我的具体问题是这样的:
有这样一个字典:{a:{b:c},d:{e}}
根据字典的级 ...


抱歉,我看错了格式,我还以为是{a:{b:{c}},d:{e}}的形式。
  1. def f(key):
  2.     for each in key:
  3.         if isinstance(key[each],dict):#假如找到下一个字典
  4.             print(each,end='-->')#打印
  5.             f(key[each])#递归查找
  6.         elif isinstance(key[each],str):
  7.             print(each,end='-->')#打印(这时候要打印两个东西,一个是标签(上面检测不到,因为这个标签(key[each])指向的对象不是字典,另外一个是字符串本身)
  8.             print(key[each])

  9. f({'a':{'b':'c'},'d':'e')
复制代码

输出
  1. a-->b-->c
  2. d-->e
复制代码

真的很抱歉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-6 08:56:39 | 显示全部楼层
无符号整形 发表于 2018-8-5 17:29
抱歉,我看错了格式,我还以为是{a:{b:{c}},d:{e}}的形式。

输出

没有没有 您真的很厉害,谢谢您呀。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 19:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表