【发布时间】:2019-09-18 21:06:37
【问题描述】:
我有一个存储在列表中的字典列表。我想将相同的字典合并为一个。我有三个领域。 Task_id 提供要检查的字段。 value 是该字段的值。首先,它检查字典中的值,并为要合并的字典创建一个新字典。如果所有值都相同并且其中一个值不同,则它将字典合并为一个。如何让它成为可能
这是我尝试过的示例代码:
field_to_be_check ="state"
merger = ["city", "ads"]
merge_name = ["cities", "my_ads"]
data = [
{'haps': 'hap0', 'state': 'tamil nadu', 'ads': 'ad1', 'city': 'tirunelveli'},
{'haps': 'hap0', 'state': 'tamil nadu', 'ads': 'ad4', 'city': 'nagerkoil'},
{'haps': 'hap0', 'state': 'tamil nadu', 'ads': 'ad1', 'city': 'tuticorin'},
{'haps': 'hap0', 'state': 'tamil nadu', 'ads': 'ad1', 'city': 'madurai'},
{'haps': 'hap0', 'state': 'tamil nadu', 'ads': 'ad1', 'city': 'chennai'},
{'haps': 'hap1', 'state': 'kerala', 'ads': 'ad2', 'city': 'palakad'},
{'haps': 'hap1', 'state': 'kerala', 'ads': 'ad2', 'city': 'guruvayor'},
{'haps': 'hap1', 'state': 'kerala', 'ads': 'ad2', 'city': 'kolikodu'},
{'haps': 'hap1', 'state': 'kerala', 'ads': 'ad2', 'city': 'kottayam'},
{'haps': 'hap1', 'state': 'kerala', 'ads': 'ad2', 'city': 'idukki'},
{'haps': 'hap2', 'state': 'mumbai', 'ads': 'ad3', 'city': 'Akola'},
{'haps': 'hap2', 'state': 'mumbai', 'ads': 'ad3', 'city': 'Washim'},
{'haps': 'hap2', 'state': 'mumbai', 'ads': 'ad3', 'city': 'Jalna'},
{'haps': 'hap2', 'state': 'mumbai', 'ads': 'ad3', 'city': 'Nanded'},
{'haps': 'hap2', 'state': 'mumbai', 'ads': 'ad3', 'city': 'Latur'}
]
d = []
list1 = []
for item in data:
value = item[field_to_be_check]
inserted = False
for l in list1:
if l[field_to_be_check] == value:
inserted = True
for m_name in merge_name:
if inserted == False:
list1.append(item)
print(list1)
所需输出:
[
{'state': 'tamil nadu','my_ads':[{'ads': 'ad1'},{'ads': 'ad4'}], 'cities':[{'city': 'tirunelveli'},{'city': 'nagerkoil'},{'city': 'tuticorin'},{'city': 'madurai'},{'city': 'chennai'}]},
{'state': 'kerala',,'my_ads':[{'ads': 'ad2'}], 'cities': [{'city': 'palakad'},{'city': 'guruvayor'},{'city': 'kolikodu'},{'city': 'kottayam'},{'city': 'idukki'}]},
{'state': 'mumbai', 'my_ads':[{'ads': 'ad3'}],'cities':[{'city': 'Akola'},{'city': 'Washim'},{'city': 'Jalna'},{'city': 'Nanded'},{'city': 'Latur'}]}
]
【问题讨论】:
-
您不需要
'cities'和'city'键,具体取决于有多少个城市。你总是想要一个'cities'键,它有时只有一个城市。 -
为什么要区分city kerla,它没有按照你在输出中说的模式?
-
在值字段中,我已经给出了条件。表明,它应该只检查这两个状态。如果它在那里,它应该合并城市并将其合并为一个并分配给目标城市
-
改变了我需要的输出......
-
是否保证
haps和ads的值对于每个state总是相同的?如果不是呢?
标签: python python-3.x dictionary for-loop