如何使用字符串和整数组合列表中的元素

2024-09-27 00:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子

results = [[('Gizmo1', 1.0), 'Owner1'], [('Gizmo2', 4.0), 'Owner2'],[('Gizmo1', 4.0), 'Owner1'],[('Gizmo2', 4.0), 'Owner2']]

我的目标是添加与尊重的所有者匹配的小发明

 results = [[('Gizmo1', 5.0), 'Owner1'], [('Gizmo2', 8.0), 'Owner2']]

我尝试将列表拆分为两个较小的列表,创建一个字典

items_qty = [[('Gizmo1', 1.0)], [('Gizmo2', 4.0)],[('Gizmo1', 4.0)],[('Gizmo2', 4.0)]]

owner = [['Owner1'], ['Owner2'],['Owner1'],['Owner2']]

data = {}
for key, val in zip(owner, items_qty):
    data[key] = data.get(key, 0) + val

但这给了我一个错误

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

我如何获取或保存信息并不重要


Tags: key目标列表fordataitemsvalresults
3条回答

试试这个:

results = [[('Gizmo1', 1.0), 'Owner1'], [('Gizmo2', 4.0), 'Owner2'], 
[('Gizmo1', 4.0), 'Owner1'],[('Gizmo2', 4.0), 'Owner2']]

data = {}
for element in results:
    gizmo_value = element[0][1]
    gizmo_name = element[0][0]
    owner = element[1]
    try:
        data[owner][gizmo_name] += gizmo_value
    except KeyError:
        data[owner]={ gizmo_name: gizmo_value }

使用此逻辑,您将得到一个包含所有数据的字典,就像您命名的那样。这完全取决于你如何命名

您可以使用临时dict存储中间结果,然后从中重建results

results = [[('Gizmo1', 1.0), 'Owner1'], [('Gizmo2', 4.0), 'Owner2'],[('Gizmo1', 4.0), 'Owner1'],[('Gizmo2', 4.0), 'Owner2']]

temp = {}
for item,owner in results:
    if owner in temp:
        _,value = item
        prev = temp[owner]
        temp[owner] = prev[0],prev[1]+value
    else:
        temp[owner] = item
#print(temp)

results = [[value, key] for key,value in temp.items()]
print(results)

按要求输出

试试这个:

    items_qty = [[('Gizmo1', 1.0)], [('Gizmo2', 4.0)],[('Gizmo1', 4.0)], [('Gizmo2', 4.0)]]

owner = [['Owner1'], ['Owner2'],['Owner1'],['Owner2']]

data = {}
for key, val in zip(owner, items_qty):
    print(key)
    giz, num = val[0]
    (_, newNum) = data.get(key[0], (giz, 0))
    newNum += num
    
    data[key[0]] = (giz, newNum)

问题是您将数字添加到元组中,而不是元组中的值

相关问题 更多 >

    热门问题