我知道以下两种方法:
代码:
mylist = [{'outer':[{'inner':[1,2,3]}, {'inner':[4,5,6,7]}]} ,
{'outer':[{'inner':[11,22,33]}, {'inner':[44,55,66,77]}]}
]
上面的列表是我原始代码的示例,其中我以JSON格式转储信息并加载它。所以“mylist”是加载的json文件。
第一种方法
for c in mylist:
for d in c['outer']:
for e in d['inner']:
print e
第二种方法
for i in range(len(mylist)):
for j in range(len(mylist[i]['outer'])):
for k in range(len(mylist[i]['outer'][j]['inner'])):
print mylist[i]['outer'][j]['inner'][k]
上述两种访问嵌套列表(或数组)元素的方法有何区别?
它们之间的技术差异是什么?
除上述方法外还有更好的方法吗?
答案 0 :(得分:0)
In [48]: print [e for c in mylist for d in c['outer'] for e in d['inner']]
[1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77]
它应该更短,更快(通过一次打印整个东西)。
答案 1 :(得分:0)
您可以创建功能来展平输入列表,如下所示:
from collections import Iterable
def flatten(l):
for element in l:
if isinstance(element, Iterable) and not isinstance(element, basestring):
if isinstance(element, dict):
element = element.values()
for i in flatten(element):
yield i
else:
yield element
使用您的输入:
In [3]: [ item for item in flatten(mylist) ]
Out[3]: [1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77]
它甚至适用于更多嵌套列表,如:
mylist = [ {'outer':
{ 'inner':
{ 'inner-1': 1, 'inner-1-1': 11},
'inner2':
[ set((1,2,3,4)), tuple((5,6,7,8)), [9,10,11] ],
}}]
In [3]: [ item for item in flatten(mylist) ]
Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 11]