【发布时间】:2020-01-22 00:45:14
【问题描述】:
我有一个字典列表:
[
{
'Tahsin': [
{'January': 1}
]
},
{
'Arabic Language': [
{'September': 1}
]
},
{
'Arabic Language': [
{'August': 2}
]
},
{
'Arabic Language': [
{'August': 2}
]
}
]
我想合并相同键下的值并删除重复项。
我试过这个following code:
list_of_unique_dicts = []
for dict_ in student_per_course:
if dict_ not in list_of_unique_dicts:
list_of_unique_dicts.append(dict_)
我得到了结果:
[
{
'Tahsin': [
{'January': 1}
]
},
{'Arabic Language': [
{'September': 1}
]
},
{
'Arabic Language': [
{'August': 2}
]
}
]
结果不完美,月份的数值还是有重复的。
然后,我尝试了这个following code:
bar = {
k: [d.get(k) for d in list_of_unique_dicts]
for k in set().union(*list_of_unique_dicts)
}
得到了这个结果:
{
'Tahsin': [
[
{'January': 1}
],
None, None
],
'Arabic Language': [
None,
[
{'September': 1}
],
[
{'August': 2}
]
]
}
仍然不是完美的结果^_^。
我还尝试将 Pandas 与 following code 一起使用:
res = pd.DataFrame(list_of_unique_dicts).to_dict(orient='list')
得到了这个结果:
{
'Tahsin': [
[
{'January': 1}
],
nan, nan
],
'Arabic Language': [
nan,
[
{'September': 1}
],
[
{'August': 2}
]
]
}
以上仍然不是我想要的结果。
预期的结果应该是:
[
{
'Tahsin': [
{'January': 1}
]
},
{
'Arabic Language':
[
{'September': 1,
'August': 2
}
]
},
]
第一个结果的值被合并的地方。
那么,如何做到这一点..?,任何帮助将不胜感激:)
【问题讨论】:
-
一个选项是创建一个类似于您的第二种方法的中间字典(不是字典列表)。循环遍历
list_of_unique_dicts中的所有条目,如果中间dict中不存在该条目的key,则添加它,否则更新中间dict中的值。然后最后,您可以将此中间字典转换为字典列表。试试这个并发布结果。
标签: python arrays pandas list dictionary