Python根据列表字典中的重复值组合数据

2024-04-26 21:54:23 发布

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

我有一本字典,里面的数据和下面的相似

{'Bldg1':[('0', 'Sam'), ('0', 'John'), ('1', 'Tom'), ('2', 'Jane')], 'Bldg2' :[('0', 'Peter'), ('0', 'Dan'), ('1', 'Tom'), ('1', 'Jack'), ('3', 'Frank')]}

我试图把同一层楼的租户合并在一起。除租户外,“Blgd1”中还有重复数据,如楼层“0”。我正在尝试获取重复数据,并将第二个值组合起来,使其看起来与下面的输出类似:

{'Bldg1':[('0', 'Sam - John'), ('1', 'Tom'), ('2', 'Jane')], 'Bldg2' :[('0', 'Peter - Dan'), ('1', 'Tom - Jack'), ('3', 'Frank')]}

我一直在与下面的功能,它将删除重复的条目,但我被困在前进。这有可能吗?你知道吗

 def get_tenants_bldg_floor(dct, building, floor):
    unique_tenant_list = []
    for k,v in dct.iteritems():
        building = k
        for item in v:
            floor = item[0]
            tenant = item[1]
            ten_bldg_floor = tenant+', '+bldg_in_func+', '+floor_in_func
            for v in k:
                if ten_bldg_floor in unique_tenant_list:
                    print 1
                else:
                    unique_tenant_list.append(ten_bldg_floor)
                    print 0
    return unique_tenant_list

Tags: 数据inforsamitemjohnlistunique
1条回答
网友
1楼 · 发布于 2024-04-26 21:54:23

我会按照@jornsharpe的建议去做,把楼层合并成一本字典。这也使它更容易处理:

original_data = {'Bldg1':[('0', 'Sam'), ('0', 'John'), ('1', 'Tom'), ('2', 'Jane')], 'Bldg2' :[('0', 'Peter'), ('0', 'Dan'), ('1', 'Tom'), ('1', 'Jack'), ('3', 'Frank')]}

def combine_by_floor(data):
    new_data = dict()
    for building, floortenants in data.items():
        for floor,tenant in floortenants:
            new_data.setdefault(building, {}).setdefault(floor, []).append(tenant)
    return new_data

combined = combine_by_floor(original_data)
### EXAMPLE ###
>>> print(combined)
{'Bldg1': {'2': ['Jane'], '1': ['Tom'], '0': ['Sam', 'John']}, 'Bldg2': {'3': ['Frank'], '1': ['Tom', 'Jack'], '0': ['Peter', 'Dan']}}

基本上,浏览一下你的字典,再编一本新的。对于每个元组,将tenant附加到new_data[building][floor]。如果new_data[building]不存在,则将其创建为空目录。如果new_data[building][floor]不存在,则将其创建为空列表。你知道吗

相关问题 更多 >