2015-04-23 84 views
0

我想要結合Python3中的列表列表中的幾個元素。我有一個數據集簡化爲:在Python中重構列表的列表

example_list = [ 
    [1, +, 3, "MNP1", 2480], 
    [2, +, 2, "MNP1", 2480], 
    [3, +, 1, "MNP2", 3200], 
    [4, -, 4, "MNP3", 2480], 
    [5, -, 2, "MNP4", 4700] 
] 

我需要的是產生含四個要素的列表的新列表:

第1個要素:示例中的最後一個元素的每個不同的值。如果它們具有不同的符號(+或 - )必須分開考慮(例如:2480,3200,2480,4700)

第二元件:每個符號

第三元件:將出現次數的最後一個元素( 2,1,1,1)

第四元件:第三元素的總和僅當符號和最後一個元素是相同的(3 + 2,1,4,2)

預期的輸出是:

output_list = [ 
[2480, +, 2, 5], 
[3200, +, 1, 1], 
[2480, -, 1, 4], 
[4700, -, 1, 2] 
] 

我一直在嘗試使用最後一個元素作爲鍵的字典來完成它的幾種方法,但是我無法讓該函數考慮符號。

有什麼建議嗎?

預先感謝您!

+0

能不能再解釋,去年持何立場?爲什麼是5,1,4,2? –

+0

當列表中的符號和示例中的最後一個位置匹配時,列表中示例列表的第三個位置中的值的總和。在這種情況下:[1,+,3,「MNP1」,2480],[2,+,2,「MNP1」,2480]共享符號和2480,在輸出中我需要總結他們的第三個元素(3 + 2)= 5 – Mastodon

回答

0

您可以使用字典按條目的第二列和最後一列對條目進行分組。如果訂單很重要,請使用OrderedDict,否則常規字典可能也適用。

example_list = [ 
    [1, '+', 3, "MNP1", 2480], 
    [2, '+', 2, "MNP1", 2480], 
    [3, '+', 1, "MNP2", 3200], 
    [4, '-', 4, "MNP3", 2480], 
    [5, '-', 2, "MNP4", 4700] 
] 

output_dict = collections.OrderedDict() 
for _, op, arg2, _, num in example_list: 
    key = num, op 
    output_dict.setdefault(key, [0, 0]) 
    output_dict[key][0] += 1 
    output_dict[key][1] += arg2 

一旦你的,你可以把它變成一個列表:

>>> output_list = [list(key) + value for key, value in output_dict.iteritems()] 
>>> print(output_list) 
[['+', 2480, 2, 5], ['+', 3200, 1, 1], ['-', 2480, 1, 4], ['-', 4700, 1, 2]] 
+0

非常有用的答案!謝謝 :) – Mastodon