gpt4 book ai didi

使用将列表作为值的字典对列表进行分组的 Pythonic 方法

转载 作者:太空狗 更新时间:2023-10-30 00:31:02 25 4
gpt4 key购买 nike

我正在寻找一种 Pythonic 方式或更有效的方式来解决这个问题。我有一个字典,它有集合作为值(允许跨键重复)。给定一个列表,我必须创建一个字典,使用主字典中的键将每个类别映射到元素。我举个例子来说明。

大词典

{
"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']
}

我目前的想法

将集合中的单个项目反转为键,然后进行查找。

{
'Aron' : ['KeyA'],
'Foo' : ['KeyB', 'KeyZ'],
'Bar' : ['KeyB', 'KeyZ'],
'Random Value' : ['KeyA', 'KeyZ']
}

我会通过遍历每个集合中的每个项目来初始化倒排字典。创建这样一个字典的大约时间是 O(n)。在如此创建的倒排字典中查找列表中的项目。说出值 Bar。使用信息 'Bar': ['KeyB', 'KeyZ'] 创建一个新字典。结果字典将是 {'KeyB': ['Bar'], 'KeyZ': ['Bar']}。对于下一个项目,我必须对现有字典做一些簿记,比如键是否存在,如果是,则附加到现有列表等等。

在映射到每个键的集合上使用 in 运算符(检查成员资格)

大多数情况下,主词典和输入列表会非常小。 (所有套装中的独特元素少于 500 件)。所以我可以检查每个键返回的集合中的成员资格并创建一个字典。这显然效率较低,但适用于大多数情况。

我还有一些与上面给出的例子类似的操作。我不想对所有这些函数进行手动簿记,因为它们容易出错并且比内置函数慢。

我需要什么?

  • 更好的方法(更快的算法)
  • itertools 中的内置函数,因为它们速度更快
  • 第 3 方库
  • 一些普通 Python 用户不会想到的深奥理解?

最佳答案

在开始转换之前将列表转换为集合怎么样?集合查找比列表中的线性搜索更快。

input_set = set(input)

一旦你有了它,你就可以使用常规的字典理解,在我看来:

output = {key: [x for x in value if x in input_set] for key, value in master_dict.items()}

结果:

output == {'KeyB': ['Foo', 'Bar', 'Dog'], 'KeyA': ['Aron'], 'KeyZ': ['Foo', 'Bar']}

关于使用将列表作为值的字典对列表进行分组的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47987707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com