【问题标题】:sort list (multidimentional) by its element in python按python中的元素排序列表(多维)
【发布时间】:2019-08-13 05:04:21
【问题描述】:

我的代码是

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

【问题讨论】:

标签: python python-3.x list


【解决方案1】:

你可以使用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']

【讨论】:

  • 感谢您的帮助!我不明白这个“d[(*i[0][:2], i[1])] += i[0][2]”是什么声明做!你能告诉我更多吗?
  • @lucas 和d = {‘i’: 0}; d[‘i’] +=1或者d[‘i’] = d[‘i’] + 1一样
  • 现在我明白了。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2022-06-27
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多