加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数据类型字典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': '贵州茅台'
}
}
数据类型字典list各种嵌套为什么可不可
明白了一个道理:{} 作为集合,只能放进去被哈希的结构。 可被哈希 表现为有键有值,放在集合里面能通过键找到。比如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各种嵌套为什么可不可[] 作为 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  如果我一上你没看懂,那 大聪明 来给你们再解释一波吧,
数据类型字典list各种嵌套为什么可不可去问问大聪明:
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不可以
数据类型字典list各种嵌套为什么可不可 大聪明回复我啦:
在Python中,bb 是一个有效的列表(list),它包含多个字典(dictionary)元素。这是合法的,因为列表可以包含任意类型的元素,包括字典。 
 然而,cc 的定义尝试创建一个由字典组成的集合(set)。在Python中,集合(set)是一个无序的、不包含重复元素的集,它的元素必须是不可变(immutable)的类型,如整数、浮点数、字符串和元组等。字典是可变的,不能作为集合的元素,这就是为什么 cc 的定义不合法并会导致语法错误的原因。
 如果你需要一个包含多个字典的集合,你应该使用列表(如 bb),或者如果需要确保不包含重复的字典,你可以使用列表并通过额外的逻辑来确保不添加重复的字典。如果确实需要使用类似集合的结构来避免重复且元素是字典,你可能需要将字典转换为可哈希(hashable)的形式,例如通过将字典元素转换为元组。

大聪明最后一段  云云的,其实你也是 字典dict你放不进去了,那你就用list列表去放就行啦,放dict不能重复,放list没关系,



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有