如何迭代多维python词典而不必检测它们是否有子列表?

时间:2015-09-24 20:02:14

标签: python dictionary

说我有以下词典:

a = { 'string1':'string2', 
      'nested': ['string3', 'string4'] }

我有兴趣迭代所有可能的值,无论它们是否在列表中(string2,string3,string4)

for b in a.itervalues() 

会给我所有的钥匙,但它们看起来像:

['string3', 'string4']
string2
然后我可以检查:

isinstance(values, list) 

并添加第二个for循环,但我想知道是否有更优雅的方式。

3 个答案:

答案 0 :(得分:1)

>>> b = []
>>> for item in a.values():
...     b.extend(item) if isinstance(item,list) else b.append(item)
... 
>>> b
['string2', 'string3', 'string4']

答案 1 :(得分:0)

我会使用isinstanceif/else,但如果你想要一个班轮:

a = { 'string1': 'string2',
  'nested': ['string3', 'string4']}

from itertools import chain

for v in chain(*(v if isinstance(v, list) else (v,)
             for v in a.itervalues())):
    print(v)

如果您想存储数据:

from itertools import chain

vals = list(chain(*(v if isinstance(v, list) else (v,)
                 for v in a.itervalues())))
print(vals)

['string3', 'string4', 'string2']

答案 2 :(得分:-1)

如果您想要一个平面的值列表:

li = []

for k in a.keys():
    val = a[k]
    if type(val) == list:
        li.extend(val)
    else:
        li.append(val)

打印(LI)

<强>输出

['string3','string4','string2']