Python-将字典添加到列表

时间:2018-10-03 15:01:13

标签: python dictionary merge

列表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完成此操作?谢谢!

2 个答案:

答案 0 :(得分:1)

d1={ 
   'test': 'baum',
   'alter': 0,
   'voegel': ['amsel']
}
d2={ 
   'test': 'grosserbaum',
   'alter': 3,
   'voegel': ['meise']
}

让我们尝试一下您的预期输出

  

{d1:d2} #TypeError:不可散列的类型:'dict'

由于无法对dict类型进行哈希处理而引发错误。与列表类型类似,因为它没有哈希函数。因此,故事的寓意是为了使对象可散列,它必须是不可变的类型,例如stringintegertuple

如果您只是想遍历字典

[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使用更少的内存。