说我有以下词典:
a = { 'string1':'string2',
'nested': ['string3', 'string4'] }
我有兴趣迭代所有可能的值,无论它们是否在列表中(string2,string3,string4)
for b in a.itervalues()
会给我所有的钥匙,但它们看起来像:
['string3', 'string4']
string2
然后我可以检查:
isinstance(values, list)
并添加第二个for循环,但我想知道是否有更优雅的方式。
答案 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)
我会使用isinstance
和if/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']