数据类型字典list各种嵌套为什么可不可
(2024-07-28 22:19:42)| 分类: 接口类的哈 |
字典不可以被哈希 不能作为键
这种就是 对的 list
里面每个是字典:
stock_infos=[
{
'code':
'600256.SH.GG',
'name': '贵州茅台2'
},
{
'code':
'603311.SH.GG',
'name': '贵州茅台'
}
]
这种就是 不对的 就是字典里面 直接包含字典不可以。
因为里面的字典不能作为另一个字典的键:
stock_infos ={
{
'code':
'600256.SH.GG',
'name': '贵州茅台2'
},
{
'code':
'603311.SH.GG',
'name': '贵州茅台'
}
}
这种是对的,字典集合 里面是有键有值的字典结构
stock_infos ={
'600256.SH.GG':{
'code': '600256.SH.GG',
'name': '贵州茅台2'
},
'603311.SH.GG':{
'code': '603311.SH.GG',
'name': '贵州茅台'
}
}
明白了一个道理:{} 作为集合,只能放进去被哈希的结构。 可被哈希 表现为有键有值,放在集合里面能通过键找到。比如600000.SH.GG:D:MACD:DIF 就是键值,可以找到第一个大的元素( 下面这个里面有两个元素:)
{
"600000.SH.GG:D:MACD:DIF": {
"index_code": "DIF",
"key": "600000.SH.GG:D:MACD:DIF",
"value": [
{
"tr_date": 20240602
},
{
"tr_date": 20240603
}
]
},
"600001.SH.GG:D:MACD:DIF": {
"index_code": "DIF",
"key": "600001.SH.GG:D:MACD:DIF",
"value": [
{
"tr_date": 20240602
},
{
"tr_date": 20240603
}
]
}
}
而[] 作为 list,就是 链表形式,可以放进去 的是 元胞、或者说不可以被哈希的比如 一整个这玩意
{ "code": "600256.SH.GG","name": "贵州茅台2" }
呵呵{}这不是外层没有键值索引找到它吗,那好吧,用list把你们串起来,所以是可行的。
[
{
"code": "600256.SH.GG",
"name": "贵州茅台2"
},
{
"code": "603311.SH.GG",
"name": "贵州茅台"
}
]
但是, {"code": "603311.SH.GG",
多个放进去{}集合里面就不让放了,因为它本身没有外层的键 用于索引找到,如下是不让放的。
{ {
"code": "600256.SH.GG",
"name": "贵州茅台2"
},
{
"code": "603311.SH.GG",
"name": "贵州茅台"
}
}
"name": "贵州茅台"}
所以其实这设计都不傻,或者说设计者还是挺高明的,以防有的东西你放进去没有键值你找不到。
就是这玩意还是有点道道的,知道他还是费点周折的。
(所有的每个 放进pycharm debug状态下的ipthon 给个变量名然后a= 就可以运行,缓存里面明明白白的)
——————————————
20240806 12:21 如果我一上你没看懂,那 大聪明 来给你们再解释一波吧,
去问问大聪明:
bb= [ { "tr_date": 20240727, "strategy_name": "策略1", "strategy_code": "S1", "stage": "S:2", }, { "tr_date": 20240727, "strategy_name": "策略1", "strategy_code": "S1", "stage": "S:2", } ] cc= { { "tr_date": 20240727, "strategy_name": "策略1", "strategy_code": "S1", "stage": "S:2", }, { "tr_date": 20240727, "strategy_name": "策略1", "strategy_code": "S1", "stage": "S:2", } } print(type(bb)) print(type(cc)) 为什么 bb可以 cc不可以![]()
大聪明回复我啦:
在Python中,bb 是一个有效的列表(list),它包含多个字典(dictionary)元素。这是合法的,因为列表可以包含任意类型的元素,包括字典。
然而,cc 的定义尝试创建一个由字典组成的集合(set)。在Python中,集合(set)是一个无序的、不包含重复元素的集,它的元素必须是不可变(immutable)的类型,如整数、浮点数、字符串和元组等。字典是可变的,不能作为集合的元素,这就是为什么 cc 的定义不合法并会导致语法错误的原因。
如果你需要一个包含多个字典的集合,你应该使用列表(如 bb),或者如果需要确保不包含重复的字典,你可以使用列表并通过额外的逻辑来确保不添加重复的字典。如果确实需要使用类似集合的结构来避免重复且元素是字典,你可能需要将字典转换为可哈希(hashable)的形式,例如通过将字典元素转换为元组。
大聪明最后一段云云的,其实你也是 字典dict你放不进去了,那你就用list列表去放就行啦,放dict不能重复,放list没关系,

加载中…