将元组列表中的重复项合并到字典中,对值进行求和

时间:2016-10-16 05:19:28

标签: python list dictionary tuples counter

您好我希望将此元组列表转换为字典。因为我是python的新手,我正在想办法转换成字典。如果只有一个值,我只能转换成字典。就我而言,其中有两个值。我将在下面详细说明:

    `List of tuples: [('Samsung', 'Handphone',10), ('Samsung', 'Handphone',-1),
('Samsung','Tablet',10),('Sony','Handphone',100)]`

正如您在上面所看到的,我希望将“三星”作为键,将“手机”和“10”作为键的值。

我想要的输出是:

  `Output: {'Sony': ['Handphone',100], 'Samsung': ['Tablet',10,'Handphone', 9]}`

正如您在上面所看到的,项目“手机”和“平板电脑”是按照键值分组的,在我的情况下是索尼和三星。如果项目属于同一项目和相同的密钥(三星或索尼),则会增加/减少该项目的数量。

我非常感谢你们为实现上述输出而提出的任何建议和想法。我真的没想到了。谢谢。

3 个答案:

答案 0 :(得分:3)

defaultdict

的好机会
from collections import defaultdict

the_list = [
    ('Samsung', 'Handphone', 10), 
    ('Samsung', 'Handphone', -1), 
    ('Samsung', 'Tablet', 10),
    ('Sony', 'Handphone', 100)
]

d = defaultdict(lambda: defaultdict(int))

for brand, thing, quantity in the_list:
    d[brand][thing] += quantity

结果将是

{
    'Samsung': {
        'Handphone': 9, 
        'Tablet': 10
    },
    'Sony': {
        'Handphone': 100
    }
}

答案 1 :(得分:0)

您可以使用字典理解

来完成此操作

你真正想要的是元组用于密钥,它们将是公司和设备。

std::vector<int> V={5,4,3,2,1,6,7,8};

答案 2 :(得分:0)

您的输出有问题,可以通过正确的标识看到:

{
    'Sony': ['Handphone',100], 
    'Samsung': ['Tablet',10],
    ['Handphone', 9]
}

手机不是“三星”的一部分,您可以列出要获取的列表:

{
    'Sony': [
        ['Handphone',100]
    ],
    'Samsung': [
        ['Tablet',10],
        ['Handphone', 9]
    ]
}

使用:

my_list = [('Samsung', 'Handphone',10), ('Samsung', 'Handphone',-1), ('Samsung','Tablet',10),('Sony','Handphone',100)]

result = {}
for brand, device, value in my_list:
    # first verify if key is present to add list for the first time
    if not brand in result:
        result[brand] = []
    # then add new list to already existent list
    result[brand] += [[device, value]]

但我认为最好的格式是dict:

{
    'Sony': {
        'Handphone': 100
    },
    'Samsung': {
        'Tablet': 10,
        'Handphone': 9
    }
}

那就像:

my_list = [('Samsung', 'Handphone',10), ('Samsung', 'Handphone',-1), ('Samsung','Tablet',10),('Sony','Handphone',100)]

result = {}
for brand, device, value in my_list:
    # first verify if key is present to add dict for the first time
    if not brand in result:
        result[brand] = {}
    # then add new key/value to already existent dict
    result[brand][device] = value