我有很多坐标,为此我创建了一个大型词典,对于该词典,各个键可能具有相同的值列表。我想将这些键与相同的值列表合并,以获取给定值列表中有多少键的计数。我设法合并了它们,但是由于某些原因,某些值被反转了,因此不能正确合并。
到目前为止,我已经尝试用合并的键作为元组创建一个新字典,并将值保留为列表。此外,我只保留那些具有两个或多个键的值列表。
我的入门词典
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的键和值对列表。
感谢您的时间和建议。
答案 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]}