0

my code is

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()

i have multidimensional list. and after executing I am getting output like this.

[['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']

here 'A' 'B' 'C' is my supplier, 'product A','product B'& 'product C' is my product name. and digits are my qty (eg. 10,5,10,20,9,7,30,20,40)

I want to add by same date with same supplier of qty. (eg. 10+5) in 'A' supplier and another in qty 20+40 in 'C' supplier and list them individually like below seen. expected output.

[['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']
lucas
  • 1
  • 3
  • Possible duplicate of [Python Sort Multidimensional Array Based on 2nd Element of Subarray](https://stackoverflow.com/questions/20099669/python-sort-multidimensional-array-based-on-2nd-element-of-subarray) – Remy Mar 22 '19 at 08:43
  • I strongly recommend you use [pandas](https://pandas.pydata.org/) rather than base Python, for manipulating dataframes. This sort of thing is a one-liner in pandas, you would do `df.groupby('supplier')...`. Why write brittle code that requires lots of maintenance? – smci Mar 22 '19 at 10:12

1 Answers1

0

You can use 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]])    

Output:

[['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']
Mykola Zotko
  • 15,583
  • 3
  • 71
  • 73