在python中按其元素排序列表(多维)

时间:2019-03-22 08:39:08

标签: python python-3.x list

我的代码是

class Supplier:
def supplier_name(self, sup_name):
    return sup_name


class Product(Supplier):

def purchase(self, date, p_name, qty):
    p_list = [date, p_name, qty]
    return p_list


x = s.supplier_name("A")
pr_name = "product B"
unit_row = p.purchase("2018-12-12", pr_name, 20)
c.get_data(unit_row, x)


x = s.supplier_name("A")
pr_name = "product A"
unit_row = p.purchase("2019-10-10", pr_name, 5)
c.get_data(unit_row, x)


x = s.supplier_name("B")
pr_name = "product A"
unit_row = p.purchase("2018-11-15", pr_name, 7)
c.get_data(unit_row, x)


x = s.supplier_name("B")
pr_name = "product B"
unit_row = p.purchase("2018-11-16", pr_name, 9)
c.get_data(unit_row, x)


x = s.supplier_name("B")
pr_name = "product C"
unit_row = p.purchase("2018-12-15", pr_name, 10)
c.get_data(unit_row, x)


x = s.supplier_name("C")
pr_name = "product A"
unit_row = p.purchase("2018-06-10", pr_name, 20)
c.get_data(unit_row, x)


x = s.supplier_name("C")
pr_name = "product B"
unit_row = p.purchase("2018-07-10", pr_name, 30)
c.get_data(unit_row, x)


x = s.supplier_name("C")
pr_name = "product A"
unit_row = p.purchase("2018-06-10", pr_name, 40)
c.get_data(unit_row, x)

c.display()
我有多维列表。执行后,我得到这样的输出。

[['2019-10-10', 'product A', 10], 'A']
[['2019-10-10', 'product A', 5], 'A']
[['2018-12-15', 'product C', 10], 'B']
[['2018-12-12', 'product B', 20], 'A']
[['2018-11-16', 'product B', 9], 'B']
[['2018-11-15', 'product A', 7], 'B']
[['2018-07-10', 'product B', 30], 'C']
[['2018-06-10', 'product A', 20], 'C']
[['2018-06-10', 'product A', 40], 'C']

这里'A''B''C'是我的供应商, “产品A”,“产品B”和“产品C”是我的产品名称。 和数字是我的数量(例如10,5,10,20,9,7,30,20,40)

我想在同一日期与同一数量的供应商添加。 (例如10 + 5)在“ A”供应商中 另一个在“ C”供应商中的数量为20 + 40,并按如下所示逐一列出。预期输出。

[['2019-10-10', 'product A', 15], 'A']
[['2018-12-12', 'product B', 20], 'A']

[['2018-12-15', 'product C', 10], 'B']
[['2018-11-16', 'product B', 9], 'B']
[['2018-11-15', 'product A', 7], 'B']

[['2018-07-10', 'product B', 30], 'C']
[['2018-06-10', 'product A', 60], 'C']

1 个答案:

答案 0 :(得分:0)

您可以使用defaultdict

from collections import defaultdict

l = [[['2019-10-10', 'product A', 10], 'A'],
    [['2019-10-10', 'product A', 5], 'A'],
    [['2018-12-15', 'product C', 10], 'B'],
    [['2018-12-12', 'product B', 20], 'A'],
    [['2018-11-16', 'product B', 9], 'B'],
    [['2018-11-15', 'product A', 7], 'B'],
    [['2018-07-10', 'product B', 30], 'C'],
    [['2018-06-10', 'product A', 20], 'C'],
    [['2018-06-10', 'product A', 40], 'C']]

d = defaultdict(int)

for i in l:
    d[(*i[0][:2], i[1])] += i[0][2]

for k, v in d.items():
    print([[*k[:2], v], k[-1]])    

输出:

[['2019-10-10', 'product A', 15], 'A']
[['2018-12-15', 'product C', 10], 'B']
[['2018-12-12', 'product B', 20], 'A']
[['2018-11-16', 'product B', 9], 'B']
[['2018-11-15', 'product A', 7], 'B']
[['2018-07-10', 'product B', 30], 'C']
[['2018-06-10', 'product A', 60], 'C']