Python向lis添加字典

2024-09-25 08:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

列表1

[]

字典1

^{pr2}$

字典2

{ 
   'test': 'grosserbaum',
   'alter': 3,
   'voegel': ['meise']
}

做点什么把字典合并在一起。。。。

结果:

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

如何使用Python实现这一点?谢谢!在


Tags: test列表字典alterpr2baumvoegelmeise
2条回答

如果您的dict中的数据从未更改,并且您需要密钥,那么您应该选择使用^{}s

您需要将嵌套的list转换为tuple,因为列表是不可散列的。然后,您可以将现有字典放入namedtuple(或直接创建它们)。在

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')}

现在您可以将这些namedtuples保存在set中,这样集合将只包含唯一的项!另外,namedtuples使用的内存比dict少,因为它实现了^{}。在

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

让我们试试你的预期输出

{d1:d2} #TypeError: unhashable type: 'dict'

由于无法对dict类型进行哈希运算,因此引发错误。与list类型类似,因为它不附带哈希函数。因此,故事的寓意是为了使一个对象是散列的,它必须是不可变的类型,比如stringinteger或{}。在

以防你只是想重复这些句子

^{pr2}$

或者

(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/

相关问题 更多 >