合并字典中不同键的相同值的探针

时间:2019-03-27 13:03:41

标签: python sorting dictionary merge

我有很多坐标,为此我创建了一个大型词典,对于该词典,各个键可能具有相同的值列表。我想将这些键与相同的值列表合并,以获取给定值列表中有多少键的计数。我设法合并了它们,但是由于某些原因,某些值被反转了,因此不能正确合并。

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

我的入门词典

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的键和值对列表。

感谢您的时间和建议。

1 个答案:

答案 0 :(得分:3)

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

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]}