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

时间:2014-07-17 17:12:54

标签: python dictionary

我有一个字典,其数据类似于以下内容

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

1 个答案:

答案 0 :(得分:1)

我会这样做@jonrsharpe建议并将地板组合成字典。这也使得处理起来更容易:

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]不存在,请将其创建为空列表。