gpt4 book ai didi

python - 在 O(n^2/2) 中迭代字典

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:53 25 4
gpt4 key购买 nike

给定一个字典:

d = {'a':0, 'b': 1, 'c': 2}

我想制作一个新字典来计算 dd 值的乘积。

这是我需要的结果:

d = {'a#a': 0, 'a#b': 0, 'a#c': 0, 'b#b' : 1, 'b#c': 2, 'c#c': 4}

但是我不想得到这样的结果:

d = {'a#a': 0, 'a#b': 0, 'a#c': 0, 'b#a' : 0, 'b#b' : 1, 'b#c': 2, 'c#a': 0, 'c#b': 2, 'c#c': 4}

因为 c#a 已经被 a#c 计算过了。

如果这是一个数组或列表,我会做类似的事情

res = []
t = [0, 1, 2]

for i in range(len(t):
for j in range(i):
res.append(t[i] * t[j])

我怎样才能做类似但使用字典的事情?

最佳答案

Python 自带电池,但最干净的方法并不总是显而易见的。您已经在 itertools 中内置了您想要的功能。

试试这个:

import itertools
result = {f'{k1}#{k2}': d[k1]*d[k2]
for k1, k2 in itertools.combinations_with_replacement(d, 2)}

itertools.combinations 为您提供所有没有重复的对,itertools.combinations_with_replacement 为您提供唯一的对,包括键相同的对。

输出:

>>> print(result)
{'a#a': 0, 'a#b': 0, 'a#c': 0, 'b#b': 1, 'b#c': 2, 'c#c': 4}

关于python - 在 O(n^2/2) 中迭代字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55806581/

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