列表1
>series
Apr May Jun Jul Aug
2017 34 138 110 160 133
modelo <- ets(series, model = "AAN", damped = F,
lower = c(rep(0.05, 3), 0.98), upper = c(0.9, 0.5, 0.9, 0.98))
>modelo
ETS(A,A,N)
Smoothing parameters:
alpha = 0.5634
beta = 1
Initial states:
l = 34
b = 104
sigma: 60.2407
字典1
[]
词典2
{
'test': 'baum',
'alter': 0,
'voegel': ['amsel']
}
做一些将字典合并在一起的事情。...
结果:
{
'test': 'grosserbaum',
'alter': 3,
'voegel': ['meise']
}
如何使用Python完成此操作?谢谢!
答案 0 :(得分:1)
d1={
'test': 'baum',
'alter': 0,
'voegel': ['amsel']
}
d2={
'test': 'grosserbaum',
'alter': 3,
'voegel': ['meise']
}
让我们尝试一下您的预期输出
{d1:d2} #TypeError:不可散列的类型:'dict'
由于无法对dict
类型进行哈希处理而引发错误。与列表类型类似,因为它没有哈希函数。因此,故事的寓意是为了使对象可散列,它必须是不可变的类型,例如string
,integer
或tuple
。
如果您只是想遍历字典
[d1,d2] # convert into a list
OR
(d1,d2)# convert into a tuple
或使用不可变键创建新列表
{'d1':d1,'d2':d2}
进一步参考https://www.asmeurer.com/blog/posts/what-happens-when-you-mess-with-hashing-in-python/
答案 1 :(得分:0)
如果您的dict
中的数据从未更改,并且您想要密钥,那么您应该选择使用namedtuple
s。
由于列表不可散列,因此您需要将嵌套的list
转换为tuple
。然后,您可以将现有的字典放入它们的命名元组中(或直接创建它们)。
d1 = {
'test': 'baum',
'alter': 0,
'voegel': ('amsel')
}
d2 = {
'test': 'grosserbaum',
'alter': 3,
'voegel': ('meise')
}
from collections import namedtuple
Test = namedtuple("Test", "test alter voegel")
t1 = Test(**d1)
t2 = Test(**d2)
print(t1) # Test(test='baum', alter=0, voegel='amsel')
print(t2) # Test(test='grosserbaum', alter=3, voegel='meise')
print(set([t1, t2])) # {Test(test='grosserbaum', alter=3, voegel='meise'), Test(test='baum', alter=0, voegel='amsel')}
现在,您可以将这些namedtuple保留在set
中,这样集合将仅包含唯一项!另外,由于namedtuple实现了__slots__
,因此它比dict使用更少的内存。