我有一个python字典,它由许多嵌套字典组成。也就是说,它看起来像这样:
result = {
123: {
'route1': 'abc'
'route2': 'abc1'
},
456: {
'route1': 'abc'
'route2': 'abc1'
},
789: {
'route1': 'abc2'
'route2': 'abc3'
},
101: {
'route1': 'abc'
'route2': 'abc1'
},
102: {
'route1': 'ab4'
'route2': 'abc5'
}
}
这里我们可以看到123
、456
和101
具有相同的值。
我要做的是找出重复的物体,在这种情况下是:
{
'route1': 'abc'
'route2': 'abc1'
}
以及具有这个重复对象的键,即123
、456
和101
。
我们怎么做?你知道吗
除了重复对象信息,我还想知道哪些对象不重复。即789
及其相应的对象和102
及其相应的对象。你知道吗
PS:请注意,我事先并不知道哪些对象是重复的,因为这个结构将在代码中生成。因此,可能不存在任何重复的对象,或者可能存在多个对象,即多个对象。
另外,由于一些限制,我不能使用pandas
或numpy
等。你知道吗
可以通过创建一个字典来实现这一点,其中包含
result
dict中每个不同值的所有匹配键(其中值本身就是dict)。这是Python中相当常见的模式,遍历一个容器并将值聚合到dict中。然后,一旦创建了聚合dict,就可以将其拆分为重复值和单个值。你知道吗要构建聚合dict,需要使用
result
中的每个子目录作为键,并将原始dict中匹配的键附加到与该子目录相关联的列表中。挑战在于不能将子目录直接用作字典键,因为它们是不可散列的。但是你可以通过把它们转换成元组来解决这个问题。元组也应该被排序,以避免丢失的重复项以不同的顺序出现。你知道吗只需看一些示例代码,可能更容易理解:
您可以使用
drop_duplicates()
的pandas
函数:首先在数据帧上转换你的dict
输出:
然后使用函数
drop_duplicates
并转换为dict输出:
使用
collections.defaultdict
:输出:
对于不重复的项目,请使用列表理解:
输出:
相关问题 更多 >
编程相关推荐