[英]Append element to a list based on the values of the nested list
我想基於相同列表但基於不同索引的值來附加嵌套列表的特定索引的值。
因此,基本上,如果我的初始列表如下所示:
a = [(1,2,1,[1,2,3]),(1,2,2,[3,2,4]),(1,2,3,[7,3,4]) ,(1,2,3,[11,2,7]),...,(2,1,1,[5,6,3]),(2,1,2,[3,1,8 ]),...]
我想首先擁有一個列表a的第三個索引的所有值的列表,它們共享列表a中的第一個和第二個索引的相同值。 因此,第一個輸出將如下所示:
b = [[1,2,3],[3,2,4],[7,3,4],[11,2,7]]
然后,我想對輸出進行一些計算,保存數據並從初始列表(列表a)中獲取共享第一索引和第二索引的相同值的另一組數據。
應該對初始列表的所有值重復此過程,直到該列表中沒有剩余值為止。
使用以下代碼,我得到了第一組數據,但是在獲取下一組數據時遇到了問題:
od = 1
ri = 1
q=0
for i in range(len(a)):
while q<len(a):
if a[q][0]==od and a[q][1]==ri:
b.append(Net_info[q][3])
q+=1
ri += 1
od += 1
只需使用defaultdict
並根據前兩個元素附加第三個元素,例如:
from collections import defaultdict
result = defaultdict(list)
for ai in a:
result[ai[:2]].append(ai[3])
這將生成一個字典,例如:
>>> result
defaultdict(<class 'list'>, {(1, 2): [[1, 2, 3], [3, 2, 4], [7, 3, 4], [11, 2, 7]], (2, 1): [[5, 6, 3], [3, 1, 8]]})
因此,字典將元組的前兩個元素映射到與索引三相關聯的那些元素的列表。
現在,我們可以單獨處理這些列表,例如:
for k,b in result.items():
print('%s: %s'%(k,b))
這將產生:
>>> for k,b in result.items():
... print('%s: %s'%(k,b))
...
(1, 2): [[1, 2, 3], [3, 2, 4], [7, 3, 4], [11, 2, 7]]
(2, 1): [[5, 6, 3], [3, 1, 8]]
該算法將在執行單傳a
。 並不會尋找那些無處元組的前兩個項目的配置,以中找到a
。
>>> data = dict()
>>> a = [(1, 2, 1, [1, 2, 3]), (1, 2, 2, [3, 2, 4]), (1, 2, 3, [7, 3, 4]), (1, 2, 3, [11, 2, 7]), (2, 1, 1, [5, 6, 3]), (2, 1, 2, [3, 1, 8])]
>>> for d in a:
... data.setdefault(d[:2], []).append(d[3])
>>> data
{(1, 2): [[1, 2, 3], [3, 2, 4], [7, 3, 4], [11, 2, 7]], (2, 1): [[5, 6, 3], [3, 1, 8]]}
>>> output = data.values()
[[[5, 6, 3], [3, 1, 8]], [[1, 2, 3], [3, 2, 4], [7, 3, 4], [11, 2, 7]]]
試試這個代碼片段,希望對您有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.