我有一个字典,其数据类似于以下内容
{'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
答案 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]
不存在,请将其创建为空列表。