我是一名使用Python的初学者而且我被卡住了。
我从两个单独的CSV文件中导入了一些数据,并将它们添加到相关变量中:
List_1 = [['01', 'Banana', '2', '10'],['02', 'Apple', '1', '10'],
['03', 'Orange', '3', '10']]
价值说明:[项目编号,项目,项目成本,项目库存]
List_2 = [['02','3'],['01','1'],['03','5']]
价值说明:[项目编号,已支付金额]
我需要将List_2中02的第1个值与List_1
中的项目编号匹配,即第1个项目。然后检索他归因于费用,在此示例中为2。
我希望这是有道理的。我尝试了几次不同的语法等,并且悲惨地失败了。
答案 0 :(得分:1)
您可以构建两个词典:
items = {entry[0]: {'item': entry[1], 'cost': float(entry[2]), 'stock': int(entry[3])}
for entry in List_1}
paid = {id_: int(count) for id_, count in List_2}
现在可以匹配两个数据集:
for id_, count in paid.items():
item = items[id_]
print(item['item'], item['cost'] * count)
输出:
Banana 2.0
Apple 3.0
Orange 15.0
答案 1 :(得分:0)
不是一个非常pythonic的解决方案,但我认为这应该使逻辑清晰:
for l2 in List_2:
for l1 in List_1:
if l2[0] == l1[0]:
print("cost for {} is: {}".format(l1[1], l1[2]))
答案 2 :(得分:0)
最佳解决方案是在读取CSV文件时生成字典,同时将字符串中的每个数据更改为适当的类型(float或int)。
如果您想将当前列表转换为dicts,并且您使用的是Python 3,则可以这样做:
D = lambda L: {k: tuple(v) for k, *v in L}
D1 = D(List_1)
D2 = D(List_2)
print(D1)
# {'02': ('Apple', '1', '10'), '01': ('Banana', '2', '10'), '03': ('Orange', '3', '10')}
print(D2)
# {'01': ('1',), '02': ('3',), '03': ('5',)}
请注意,在诸如此类数据不会更改的情况下使用列表时,首选使用元组。但是,如果您需要通过附加,插入或删除其他数据来更改值,则需要使用列表。
如果你想跟随迈克的想法,也就是对值使用dicts,你需要在字段中提供另一个参数:
D = lambda L, fields: {k: dict(zip(fields, v)) for k, *v in L}
D1 = D(List_1, ('item', 'cost', 'stock'))
D2 = D(List_2, ('paid',))
print(D1)
# {'02': {'cost': '1', 'stock': '10', 'item': 'Apple'}, '01': {'cost': '2', 'stock': '10', 'item': 'Banana'}, '03': {'cost': '3', 'stock': '10', 'item': 'Orange'}}
print(D2)
# {'01': {'paid': '1'}, '02': {'paid': '3'}, '03': {'paid': '5'}}