【问题标题】:defaultdict(list) python with complex number keys to带有复数键的 defaultdict(list) python
【发布时间】:2019-07-13 16:48:32
【问题描述】:

我正在尝试将 Python defaultdict(list) 与复数键一起使用。 结果是具有相同键的不同值被插入到不同的列表中,而不是插入到同一个列表中。怎么解决?

comp_arr = np.array([5+6j, 7+8j, 5+6j, 7+8j, 8+3j])
comp_dict= defaultdict(list)

for i in comp_arr.shape:
    (comp_dict[comp_arr [i]]).append(i)

【问题讨论】:

  • 您的defaultdict 看起来不错。你的for i in comp_arr.shape 没有做你认为的事情。试试for i in range(len(comp_arr)):
  • 小心使用复杂和/或浮点值作为键。浮点数的不精确可能意味着显然相等的值将作为不同的键提交。在这个简单的情况下,这似乎不是问题,但在更实际的情况下要小心。
  • @hpaulj 确实,这是我的问题。非常感谢

标签: python list numpy complex-numbers defaultdict


【解决方案1】:

我认为你循环错了,尝试使用enumerate() 循环:

代码:

for i, x in enumerate(comp_arr):
    comp_dict[x].append(i)

测试代码:

from collections import defaultdict
import numpy as np

comp_arr = np.array([5 + 6j, 7 + 8j, 5 + 6j, 7 + 8j, 8 + 3j])
comp_dict = defaultdict(list)

for i, x in enumerate(comp_arr):
    comp_dict[x].append(i)

print(comp_dict)

结果:

defaultdict(<class 'list'>, {(5+6j): [0, 2], (7+8j): [1, 3], (8+3j): [4]})

【讨论】:

  • 非常感谢。你能解释一下用 i 和 x 循环的动作吗?
  • @AL_P,这不会在 ix 上循环。它正在循环comp_arr 的内容。 ixcomp_arr 中的索引。检查我链接到的enumerate 的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
相关资源
最近更新 更多