gpt4 book ai didi

python - 字典理解对字典中的键进行分组

转载 作者:行者123 更新时间:2023-11-28 20:31:47 24 4
gpt4 key购买 nike

是否可以使用字典理解来对字典中的键进行分组?

d = {0: ("A",), 1: ("BB",), 2: ("BB",), 3: ("D",), 4: ("E",)}
l = [(0, 1, 2, 4), (3,)]

生产:

d = {(0, 1, 2, 4): ("A","BB", "E"), (3,): ("D",)}

更新:

我最初将值设置为集合,但已将其更改为元组。在创建 ("A","BB", "E") 而不是 ("A","BB","BB","E")

最佳答案

我会使用 defaultdict。另请注意,我稍微更改了 l 的格式,我认为它不应包含嵌套元组。

d = {0: ("A",), 1: ("BB",), 2: ("BB",), 3: ("D",), 4: ("E",)}
l = [(0, 1, 2, 4), (3,)]

output = defaultdict(list)

for key_group in l:
output[key_group].extend(d[key] for key in key_group)

print(output)
# defaultdict(<class 'list'>, {(0, 1, 2, 4): [('A',), ('BB',), ('BB',), ('E',)], (3,): [('D',)]})

output 中的值是元组列表,因为 tuples 是不可变的。下面的代码片段将产生一个输出,该输出更接近您通过展平值提供的输出(出于相同原因使用列表作为元组的值除外):

d = {0: ("A",), 1: ("BB",), 2: ("BB",), 3: ("D",), 4: ("E",)}
l = [(0, 1, 2, 4), (3,)]

output = defaultdict(list)

for key_group in l:
output[key_group].extend(chain.from_iterable(set(d[key] for key in key_group)))

print(output)
# defaultdict(<class 'list'>, {(0, 1, 2, 4): ['A', 'E', 'BB'], (3,): ['D']})

为了完整起见,使用 defaultdict(set) 的 OP 答案中的代码:

from collections import defaultdict
from itertools import chain

d = {0: ("A",), 1: ("BB",), 2: ("BB",), 3: ("D",), 4: ("E",)}
l = [(0, 1, 2, 4), (3,)]

output = defaultdict(set)

for key_group in l:
output[key_group].update(chain.from_iterable(d[key] for key in key_group))
print(output)
# defaultdict(<class 'set'>, {(0, 1, 2, 4): {'BB', 'A', 'E'}, (3,): {'D'}})

关于python - 字典理解对字典中的键进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53791484/

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