哈哈哈哈哈hhhh 发表于 2018-8-2 10:26:49

有关Python key 和 value 的问题求助

如何实现
   


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






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


的转变呢

冬雪雪冬 发表于 2018-8-2 10:37:13

>>> diot = {'a':{'b':{'c'}},'d':{'e'}}
>>> diot['a']['b']
{'c'}
而{'e'}不是字典是集合。

无符号整形 发表于 2018-8-2 10:58:33

本帖最后由 无符号整形 于 2018-8-2 11:32 编辑

def f(key):
    for each in key:
      try:#小心!假如只是{'a'}(集合)的话会出错
            if isinstance(key,dict):#假如找到下一个字典
                print(each,end='-->')#打印
                f(key)#递归查找
                continue
            elif isinstance(key,set):#假如找到集合(预示着树到了尽头)另:{'c'}是集合,而且不能key,这样得不到任何东西
                print(each,end='-->')#打印(这时候要打印两个东西,一个是集合的标签(上面检测不到,因为这个标签(key)指向的对象不是字典,另外一个是集合本身)
                print(str(key))#打印集合外加换行(记住要打印第一个元素)
                return#返回
      except TypeError:#假如只是{'a'}(集合)
            print(each)#打印集合内的元素,你可能会奇怪为什么这里打印each就行了,因为假如key是个集合(例如{'a'})的话它会被送进for(送代集合),然而TypeError就发生在第四行(用字典的方式访问集合),这时each已经被填入了集合的第一个元素(例如'a'),所以这时访问each即可访问到集合内的元素。

BngThea 发表于 2018-8-2 10:59:33

直接用键值连续索引即可

哈哈哈哈哈hhhh 发表于 2018-8-5 09:43:23

BngThea 发表于 2018-8-2 10:59
直接用键值连续索引即可

不好意思,打扰您了。可以详细给我讲一下吗?

哈哈哈哈哈hhhh 发表于 2018-8-5 09:44:09

无符号整形 发表于 2018-8-2 10:58


不好意思,我eclipse运行不出来。

无符号整形 发表于 2018-8-5 11:30:48

哈哈哈哈哈hhhh 发表于 2018-8-5 09:44
不好意思,我eclipse运行不出来。

您是否没有调用它?
您需要给f函数传入一个字典。

哈哈哈哈哈hhhh 发表于 2018-8-5 11:35:22

无符号整形 发表于 2018-8-5 11:30
您是否没有调用它?
您需要给f函数传入一个字典。

不好意思。我可能没有表述清楚,我的具体问题是这样的:
有这样一个字典:{a:{b:c},d:e}
根据字典的级别
输出   a -- >b -- >c
         d -- >e
是有关嵌套字典逐级打印的问题

无符号整形 发表于 2018-8-5 11:37:15

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

您可以将这个字典作为参数传入f,它会将它按您的要求打印出来。

无符号整形 发表于 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}}的形式。
def f(key):
    for each in key:
      if isinstance(key,dict):#假如找到下一个字典
            print(each,end='-->')#打印
            f(key)#递归查找
      elif isinstance(key,str):
            print(each,end='-->')#打印(这时候要打印两个东西,一个是标签(上面检测不到,因为这个标签(key)指向的对象不是字典,另外一个是字符串本身)
            print(key)

f({'a':{'b':'c'},'d':'e')

输出
a-->b-->c
d-->e
真的很抱歉!{:10_254:}

哈哈哈哈哈hhhh 发表于 2018-8-6 08:56:39

无符号整形 发表于 2018-8-5 17:29
抱歉,我看错了格式,我还以为是{a:{b:{c}},d:{e}}的形式。

输出


没有没有 您真的很厉害,谢谢您呀。
页: [1]
查看完整版本: 有关Python key 和 value 的问题求助