每天努力一点点,坚持下去 ------ 博客首页

Python之字典

1、字典的特点:

  • 速度快,好取值
  • 无序存储,因此每次输出的顺序都有可能不一样
  • 可以循环
  • key是不会有重复
  • 以k-v形式存在,即:
 stus={
   'name':'xiaojun',
   'sex':'',
   'heigt':'185',
   'age':18,
   'email':'abc@qq.com',
   'addr':'火星',
   'id':1
 }

 2、增删改查实现:

#查:

  • 查询所有字典内容:
print(stus)
  • 查询所有的value值:

使用.values()方法:

print(stus.values())
  •  查询所有的key:

使用.keys()方法:

print(stus.keys())
  • 查询单个值:

使用key作为变量进行查询,可以查出value值:

print(stus['name'])

如果没有key,那么以上这种方式会报错,这时换成另一种查询方式:

print(stus.get('xingming'))

使用.get()方法,如果程序中有key,则返回value值;如果没有Key,则返回:None。

(Python中的key和value都是成对出现的。)

当没有key的时候,可以设置一个默认的value值:

print(stus.get('xingming','lrx'))

那么当使用.get()时就会返回这个默认value,即lrx。

.get()方法:

  • 查找不报错
  • 可以设置默认值

#增:

  •  直接赋值,如果没有值,直接加入(有同样key会修改);
stus['name']='小军'
  • 使用.setdefault()方法:
stus.setdefault('addr','北京')

.setdefault()方法:

  • 如果原来有值,则使用setdefault()后不会覆盖原值。
  • 适用于不清楚原来有哪些key-value,又想赋值或者查询的情况:
stus['name']='小军'
stus['name']='海龙'
stus.setdefault('name','杨帆') 
print(stus['name'])
#结果为海龙

 #改:

如果有值,就覆盖原值:

stus['name']='admin'

#删:

  • 删除具体值:

使用.pop()方法,以key为变量:

stus.pop('name')
  • 删除具体值:

使用del方式,以key为变量:

del stus['name']
  • 随机删除某一个值:

使用.popitem()方法:

stus.popitem()

3、清空字典:

使用.clear()方法:

stus.clear()

4、字典合并\更新:

使用.update()方法,相当于追加,把一个字典里的内容加到另一个字典里:

abc={'住址':'北京'}
stus.update(abc)

5、字典循环:

使用for循环,

(字典都是一维的)

  • 只打印key:
for i in stus:
    if i == 'name':
        print(stus[i])
# 输出value
print((i, '========>', stus.get(i)))
  • 同时打印key和value:

使用.items()方法:

for k,v in stus.items():
    print(k,'=========>',v)

  6、多层嵌套字典应用:

all_stus={
    'xiaojun':
    {
    'name': 'xiaojun',
    'sex': '',
    'shengao': '185',
    'age': 18,
    'email': 'abc@qq.com',
    'addr': '火星',
    'id': 1,
    'cars':['牧马人','911','野马','劳斯莱斯']
    },
    'yangfan':
        {
            'name': 'hailong',
            'sex': '',
            'shengao': '185',
            'age': 18,
            'email': 'abc@qq.com',
            'addr': '火星',
            'id': 3,
            'bags':{
                'qianbao':['lv','ysl'],
                'beibao':['coach','abc']
            }
        }
}
  • 找到value所在位置后,进行列表追加:
all_stus['xiaojun']['cars'].append('五菱宏光')

(找value类似于列表,将所有的key作为下标使用。)

  • 打印值的长度:

使用len()方法:

print(len(all_stus['xiaojun']['cars']))
  • 改值:
all_stus['yangfan']['sex']=''
  • 删值:

使用.pop()方法:

all_stus['yangfan']['bags']['qianbao'].pop(0)#删除lv

使用.remove()方法:

all_stus['yangfan']['bags']['qianbao'].remove('ysl')#删除ysl

(remove()是列表list的方法,并不是字典里的方法。)

 使用del()方式:

del all_stus['yangfan']['bags']['qianbao'][0]#del在字典中括号里是key,在列表中括号里是下标

扩展:

  • 多层嵌套取值时,可以使用jsonpath模块,支持模糊查询: 

d= {
        "error_code": 0,
        "stu_info": [
                {
                        "id": 30,
                        "name": "小黑",
                        "sex": "",
                        "age": 20,
                        "addr": "北北yiu北京jj北京昌gu北京昌平",
                        "grade": "处女座",
                        "phone": "18801530191",
                        "gold": 2147483647
                },
                {
                        "id": 66,
                        "name": "小黑",
                        "sex": "",
                        "age": 28,
                        "addr": "河南省济源市北海大道32号",
                        "grade": "天蝎座",
                        "phone": "18612532941",
                        "gold": 2147483647
                }]
}
print('一般查询方式的结果:',d.get('stu_info')[0].get('name'))
import jsonpath
# result = jsonpath.jsonpath(d,'$.stu_info[0].name')
result = jsonpath.jsonpath(d,'$..name')
print('模糊查询结果:',result)

结果:
一般查询方式的结果: 小黑
模糊查询结果: ['小黑', '小黑']  

 字典排序:

data = {"xiaohei":10,"xiaozhang":8,"xiaohong":6}
d= sorted(data.items(),key=lambda l:l[1],reverse=True)
'''
1、data.items()获取到dict的key、value
2、使用lambda匿名函数,第一个l是变量名,l[1]是取{"xiaohei":10}中的第二个元素10
3、reverse关键字是升序还是降序
4、sorted会根据指定的进行排序
'''
print(d)

>>>>>
[('xiaohei', 10), ('xiaozhang', 8), ('xiaohong', 6)]

 

*  方法都是接( );只有取值时用的是[ ] 


 任何付出都是值得的,会越来越好

posted @ 2020-02-25 21:55  他还在坚持嘛  阅读(209)  评论(0编辑  收藏  举报