Python基础之字典

字典的存储方式

  • 字典是以键值对进行存储数据的
  • 字典的表示方式:{key:value,key2:value,key3:value}
dic={"jay":"周杰伦","greg":"许光汉"}##存数据
val=dic["jay"]#取出存储的数据
print(val)

字典的key必须是可哈希的数据类型,即不可变的数据类型;
字典的value可以是任何数据类型

字典的增删改查

字典里是不可能出现重复的key的

dic=dict()
#插入数据
dic["jay"]="周杰伦"
dic["jay"]="昆凌"#因为前面已经有相同的key值,所以这里执行的是修改操作

dic.setdefault("tom","忽略")#设置默认值,如果之前已经有了tom,那么这里就不起作用了

dic.pop("jay")#删除,根据key删除

print(dic['jay'])#根据字典里的key查询,如果key不存在,程序会报错
print(dic.get['jay'])#也可以进行查询操作,如果key不存在,程序返回none

字典的循环嵌套

dic={"1":xu
     "2":zhou
     "3":liu
     "4":zhao}
 #1.可以用for循环,直接拿到key
 for key in dic:
     print(key,dic[key])
     
 #2.希望把所有的key保存到一个列表中
 print(list(dic.keys()))#拿到所有的key了
 
 #3.希望把所有的value放到一个列表中
 print(list(dic.values()))

#4.直接拿到字典中的key和value
print(list(dic.items()))#这样打印出来嵌套比较多,比较乱
#可以用下面这样的循环
for key,value in dic.items():
     print(key,value)
 ###补充:
 ###a,b=(1,2)#元祖或者列表都可以执行该操作,该操作被陈伟解构(解包)
 ###print(a)
 ###print(b)

字典的嵌套

me={
    "name":"lexi",
    "age":"24",
    "teacher":{
          "name":"Tom",
          "age":"50",},
     "family":[
        {"rel":"father","age":"51"},
        {"rel":"mother","age":"49"},
        {"rel":"brother","age":"20"},
        ]
  }
#找me的老师的名字
name=me['teacher']['name']
print(name)
#给me的第二个家庭成员的年龄加1岁
me['family'][1]['age']=me['family'][1]['age']+1

字典的循环删除

dic={"刘大":xu
     "刘二":zhou
     "3":liu
     "4":zhao}
#把姓刘的都删掉
temp=[]#临时列表存放即将要删除的key
for key in dic:
    if key.startswith("刘"):  
        temp.append(key)
        #dic.pop(key)   #不能直接删,因为删除会改变字典的大小,而导致程序会报错
for t in temp:#循环列表,删除字典中的内容
    dic.pop(t)        
print(dic)

在删除的过程中出现“dictionary changed size during iteration”时,是因为迭代过程中字典的大小发生了改变。这会导致迭代器失效,从而触发该错误。解决这个问题的方法是避免在迭代过程中修改字典的大小。以下是几种可能的解决方案:

  1. 创建一个临时副本:在迭代字典之前,创建一个字典的副本,并对副本进行操作。这样可以避免直接在迭代过程中修改原始字典的大小。
my_dict = {'key1': 'value1', 'key2': 'value2'}
temp_dict = my_dict.copy()
for key, value in temp_dict.items():
    # 对字典进行操作,不会影响原始字典

  1. 使用列表保存需要删除的键:在迭代过程中,将需要删除的键保存在一个列表中,待迭代完成后再进行删除操作。
my_dict = {'key1': 'value1', 'key2': 'value2'}
keys_to_remove = []
for key, value in my_dict.items():
    if some_condition:
        keys_to_remove.append(key)
for key in keys_to_remove:
    del my_dict[key]

在上述代码中,我们首先创建一个空列表 keys_to_remove。在迭代字典的过程中,如果满足某个条件(在此示例中为 some_condition),则将当前键添加到 keys_to_remove 列表中。

一旦迭代完成,我们就可以遍历 keys_to_remove 列表,并使用 del 关键字从原始字典中删除相应的键。这种方式可以避免在迭代过程中修改字典大小而导致的错误。

请确保在实际使用时将 some_condition 替换为您自己的判断条件,并适应您的具体情况进行相应的修改。
3. 使用字典推导式创建新的字典:根据需要删除的键,通过字典推导式创建一个新的字典,而不是直接在迭代过程中修改原始字典。

my_dict = {'key1': 'value1', 'key2': 'value2'}
my_dict = {key: value for key, value in my_dict.items() if not some_condition}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值