gpt4 book ai didi

python - 如何合并具有重复键的字典列表

转载 作者:行者123 更新时间:2023-12-01 00:32:54 26 4
gpt4 key购买 nike

我有一个字典列表:

[
{
'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
}
]
},
]

第一个结果中的值被合并。

那么,如何做到这一点..?,任何帮助将不胜感激:)

最佳答案

Ide 首先通过扁平化创建元组集:

L = set([(k, k1, v1) for d in L for k, v in d.items() for y in v for k1, v1 in y.items()])
print (L)
{('Arabic Language', 'August', 2),
('Tahsin', 'January', 1),
('Arabic Language', 'September', 1)}

然后转换回您的结构:

from collections import defaultdict
out = defaultdict(dict)
for a,b,c in L:
out[a][b] = c

out = [{k: [v] for k, v in out.items()}]
print(out)
[{'Arabic Language': [{'August': 2, 'September': 1}], 'Tahsin': [{'January': 1}]}]

关于python - 如何合并具有重复键的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58037158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com