我希望能以更加Pythonic或者高效的方式解决这个问题。我有一个字典,其值为集合(重复值在不同键中可能会出现)。给定一个列表,我必须创建一个字典,将每个类别映射到使用主字典中的键来获取元素。下面是一个例子来说明。
主字典
注:本文是关于IT技术的翻译,涉及到一些专业术语,请您谨慎使用。
我会通过遍历每个集合中的每一项来初始化反转字典。创建这样一个字典的近似时间为O(n)。在创建的反转字典中查找列表中的项,比如值为“Bar”。使用信息'Bar': ['KeyB', 'KeyZ']创建一个新的字典。结果字典将是{'KeyB': ['Bar'],'KeyZ': ['Bar']}。对于下一个项,我需要对现有字典进行一些记账,例如检查键是否存在,如果存在,则附加到现有列表中等等。
在映射到每个键的集合中使用in运算符(检查成员身份)。
大多数情况下,主字典和输入列表都很小(所有集合中少于500个唯一项)。因此,我可以在每个键返回的集合中检查成员身份并创建字典。这显然效率较低,但适用于大多数情况。
我还有几个类似于上面示例的操作。我不想为它们手动记账,因为这样容易出错且速度比内置函数慢。
我需要什么?
1.更好的方法(更快的算法) 2.内置于itertools中的函数,因为这些函数更快 3.第三方库 4.一些普通Python用户不知道的深奥解析?
{
"KeyA": ['Aron', 'Ranom Value', 'Abhishek'],
"KeyB": ['Ball', 'Foo', 'Bar', 'Badge', 'Dog'],
"KeyZ": ['Random Value', 'Foo', 'Bar']
}
输入
['Foo', 'Bar', 'Dog', 'Aron']
输出
{
"KeyA": ['Aron'],
"KeyB": ['Bar', 'Foo', 'Dog'],
"KeyZ": ['Foo', 'Bar']
}
我的现在想法
将集合中的每个项反转为键,然后进行查找。
注:本文是关于IT技术的翻译,涉及到一些专业术语,请您谨慎使用。
{
'Aron' : ['KeyA'],
'Foo' : ['KeyB', 'KeyZ'],
'Bar' : ['KeyB', 'KeyZ'],
'Random Value' : ['KeyA', 'KeyZ']
}
我会通过遍历每个集合中的每一项来初始化反转字典。创建这样一个字典的近似时间为O(n)。在创建的反转字典中查找列表中的项,比如值为“Bar”。使用信息'Bar': ['KeyB', 'KeyZ']创建一个新的字典。结果字典将是{'KeyB': ['Bar'],'KeyZ': ['Bar']}。对于下一个项,我需要对现有字典进行一些记账,例如检查键是否存在,如果存在,则附加到现有列表中等等。
在映射到每个键的集合中使用in运算符(检查成员身份)。
大多数情况下,主字典和输入列表都很小(所有集合中少于500个唯一项)。因此,我可以在每个键返回的集合中检查成员身份并创建字典。这显然效率较低,但适用于大多数情况。
我还有几个类似于上面示例的操作。我不想为它们手动记账,因为这样容易出错且速度比内置函数慢。
我需要什么?
1.更好的方法(更快的算法) 2.内置于itertools中的函数,因为这些函数更快 3.第三方库 4.一些普通Python用户不知道的深奥解析?