字典中合并不同键相同值的问题

2024-04-19 18:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多坐标,为此我创建了一个大字典,每个键可能有相同的值列表。我想将这些键与相同的值列表合并,以获得给定值列表中有多少键的计数。我已经设法合并了它们,但是由于某些原因,有些值被颠倒了,因此没有正确地合并。你知道吗

到目前为止,我已经尝试创建一个新字典,将合并的键作为元组,并将值作为列表保留。此外,我只保留那些有两个或更多键的值列表。你知道吗

我的入门词典

start_dict = {
    'Key1': [243928620, 243938319],
    'Key2': [243935130, 243935973],
    'Key3': [243928620, 243938319],
    'Key4': [243928628, 243938315],
    'Key5': [243928628, 243938315],
    'Key6': [243930418, 243933130, 243933141]
}

其中键1和3的值列表相同,键4和5的值列表相同。 所以我用

from collections import defaultdict
New_dict= defaultdict(list)
for k, v in sorted(start_dict.items()):
    New_dict[tuple(v)].append(k)

final_dict = {tuple(v):set(k) for k, v in New_dict.items()}

预期结果是

{(‘Key1’,’Key2’): {243928620, 243938319}, (‘Key4’,’Key5’): {243928628, 243938315}}

但由于某种原因,它最终成为

{(‘Key1’,’Key2’): {243928620, 243938319}, (‘Key4’,’Key5’): {243938315,243928628}}

其中一个列表中的值被切换,这是一个问题,因为坐标的顺序很重要。你知道吗

当然,实际的数据集更大,合并可以处理49/50的键和值对列表。你知道吗

谢谢你的时间和建议。你知道吗


Tags: in列表newforitemsstartdict计数
1条回答
网友
1楼 · 发布于 2024-04-19 18:37:44

使用中间字典的想法是正确的,但是这个字典的键应该是原始字典的

new_dict = defaultdict(list)
for k, v in sorted(start_dict.items()):
    new_dict[tuple(v)].append(k)

final_dict = { tuple(v): list(k) for k, v in new_dict.items() if len(v) > 1 }

不需要使用set,因为我们不关心列表本身中值的唯一性。你知道吗

输出:

{('Key1', 'Key3'): [243928620, 243938319], ('Key4', 'Key5'): [243928628, 243938315]}

相关问题 更多 >