此代碼基於我收到的優雅答案question,並擴大爲接受最多5個元素的嵌套列表。總體目標是合併在索引位置1處具有重複值的嵌套列表。由於IndexError而無法遍歷嵌套列表
當marker_array中的嵌套列表具有4個元素時,異常通過將抑制IndexError。但代碼未能在最終輸出中的4元素列表之後包含最後一個列表。我的理解是,defaultdict的目的是首先避免IndexErrors。
# Nested list can have 4 or 5 elements per list. Sorted by [1]
marker_array = [
['hard','00:01','soft','tall','round'],
['heavy','00:01','light','skinny','bouncy'],
['rock','00:01','feather','tree','ball'],
['fast','00:35','pidgeon','random'],
['turtle','00:40','wet','flat','tail']]
from collections import defaultdict
d1= defaultdict(list)
d2= defaultdict(list)
d3= defaultdict(list)
d4= defaultdict(list)
# Surpress IndexError due to 4 element list.
# Add + ' ' because ' '.join(d2[x])... create spaces between words.
try:
for pxa in marker_array:
d1[pxa[1]].extend(pxa[:1])
d2[pxa[1]].extend(pxa[2] + ' ')
d3[pxa[1]].extend(pxa[3] + ' ')
d4[pxa[1]].extend(pxa[4] + ' ')
except IndexError:
pass
# Combine all the pieces.
res = [[' '.join(d1[x]),
x,
''.join(d2[x]),
''.join(d3[x]),
''.join(d4[x])]
for x in sorted(d1)]
# Remove empty elements.
for p in res:
if not p[-1]:
p.pop()
print res
輸出幾乎是我所需要的:
[['hard heavy rock', '00:01', 'soft light feather ', 'tall skinny tree ', 'round bouncy ball '], ['fast', '00:35', 'pidgeon ', 'random ']]
這個擴大版無疑失去了一些原本優雅的,由於我的技術水平。在改善這種代碼的任何一般指針大加讚賞,但在重要性排序我的兩個主要問題是:
- 我怎樣才能確保[「烏龜」,「00:40」,「溼」, 'flat','tail']嵌套列表不被忽略?
- 我能做些什麼來避免像「柔光羽毛」那樣拖尾空白?