一: 概述

  • 字典是有大括号,逗号分隔,有k/v组成
  • 字典的键必须hashable,如数字,字符串,布尔值,元组

二: 操作

2.1 增

2.1.1  直接赋值

  • 如果键不存在,则增加
dic = {'name': 'wangys','age': 18}
dic['sex'] = 'male'
print(dic)
# {'name': 'wangys', 'age': 18, 'sex': 'male'}
  • 如果键存在,则修改
dic = {'name': 'wangys','age': 18}
dic['name'] = 'wc'
print(dic) # {'name': 'wc', 'age': 18}

2.1.2 sedefault

  • 如果键不存在,则增加
dic = {'name': 'wangys','age': 18}
dic.setdefault('sex','male')
print(dic)
# {'name': 'wangys', 'age': 18, 'sex': 'male'}
  • 如果键存在,不过做更改
dic = {'name': 'wangys','age': 18}
dic.setdefault('name','wc')
print(dic)
# {'name': 'wangys', 'age': 18}

2.2 删

2.2.1 pop

  • 如果键存在,则删除这个k/v
  • 返回值为删除键的value值
dic = {'name': 'wangys','age': 18}
ret = dic.pop('age')
print(ret)
print(dic) #
# {'name': 'wangys'}
  • 如果键不存在,则报错 KeyError
dic = {'name': 'wangys','age': 18}
ret = dic.pop('male')
print(ret)
print(dic)
# KeyError: 'male'

2.2.2 del

  • 键如果存在,则删除
  • 如果不存在,则包错 KeyError
dic = {'name': 'wangys','age': 18}
del dic['name']
print(dic)
del dic['male']
print(dic) # {'age': 18}
# KeyError: 'male'

2.2.3 clear

dic = {'name': 'wangys','age': 18}
dic.clear()
print(dic)
#{}

2.2.4 popitem

  • 随机删除一个元素
  • 返回值为kv组成的元祖
dic = {'name': 'wangys','age': 18}
print(dic.popitem())
print(dic)

# ('age', 18)
# {'name': 'wangys'}

2.3 改

2.3.1  直接修改

dic = {'name': 'wangys','age': 18}
dic['name'] = 'wc'
print(dic)
# {'name': 'wc', 'age': 18}

2.3.2 update

  • 两个字典合并
  • 如果键冲突,则更新,如果不冲突则增加
dic1 = {'name': 'wangys','age': 18}
dic2 = {'name': 'wc','sex': 'male'}
dic1.update(dic2)
print(dic1)
# {'name': 'wc', 'age': 18, 'sex': 'male'}

2.4 查

2.4.1 直接查

  • 如果键不存在,则报错,KeyError
dic1 = {'name': 'wangys','age': 18}
print(dic1['name'])
# wangys
dic1 = {'name': 'wangys','age': 18}
print(dic1['male'])
# KeyError: 'male'

2.4.2 get

  • 如果不存在,则返回None,也可以指定返回值
dic1 = {'name': 'wangys','age': 18}
ret1 = dic1.get('name')
ret2 = dic1.get('male')
ret3 = dic1.get('male','改键不存在')
print(ret1,ret2,ret3)
# wangys None 改键不存在

2.4.3 setdefault

name = {'name': 'wangys','age': 18}
print(name.setdefault('name'))
# wangys

三: 其他操作

3.1 for 循环

  • 得到的是key
  • for循环字典时不允许对字典进行增删
dic1 = {'name': 'wangys','age': 18}
for item in dic1:
print(item)
# name
# age

# 直接删除字典中的元素会报错

dic = {'k1':1,'k2':2}
for el in dic:
dic.pop(el)
# RuntimeError: dictionary changed size during iteration

3.2  keys

  • 返回值是由key组成的特殊列表
  • 是可迭代的,可以被for循环
dic1 = {'name': 'wangys','age': 18}
ret = dic1.keys()
print(ret)
# dict_keys(['name', 'age'])
dic1 = {'name': 'wangys','age': 18}
ret = dic1.keys()
for key in ret:
print(key)

3.3 values

  • 返回值是由values值组成的特殊列表
  • 是可迭代的,可以被for循环
dic1 = {'name': 'wangys','age': 18}
ret = dic1.values()
print(ret)
#dict_values(['wangys', 18])

3.4 items

  • 是有key value组成的小元组后再次组成一个特殊列表,可迭代,可以被for循环
dic1 = {'name': 'wangys','age': 18}
ret = dic1.items()
print(ret)
# dict_items([('name', 'wangys'), ('age', 18)])

四: 练习题

 # 将 s = 'k1:1|k2:2|k3:3' 改为{'k1': 1, 'k2': 2, 'k3': 3} 
s = 'k1:1|k2:2|k3:3'
new_list = s.split('|')
dic = {}
for item in new_list:
k,v = item.split(':')
dic[k] = int(v)
print(dic)

# li中的数字,如果大于66 就加入k1的列表中,否则添加到k2的列表中

li = [11,22,33,44,55,66,77,88,99,90]
dic = {'k1': [],'k2': []}
for item in li:
if item == 66:continue
elif item > 66:
dic.setdefault('k1').append(item)
else:
dic.setdefault('k2').append(item)
print(dic)

# 打印序号,商品名称,价格

用户选择序号,打印商品名和价格

选择q,退出

goods = [
{'name': '电脑','price': ''},
{'name': '手表','price': ''},
{'name': '衬衣','price': ''},
{'name': '裤子','price': ''},
]
while 1:
for index in range(1,len(goods)+1):
print(index,goods[index-1]['name'],goods[index-1]['price'])
choice = input('请输入序号: ').strip()
if choice.upper() == 'Q':
break
elif choice and choice.isdigit():
choice = int(choice)
if choice >0 and choice <= len(goods):
print(goods[choice-1]['name'],goods[choice-1]['price'])
else:
print('请输入范围内的序号')
else:
print('请输入正确的序号')

字典数据操作实例

对字典列表排序及字典列表最小最大值

rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
] from operator import itemgetter
import pprint rows_by_fname = sorted(rows, key=lambda x: x['fname'])
rows_by_fname_ir = sorted(rows, key=itemgetter('fname'))
min_item = min(rows, key=itemgetter('fname'))
max_item = max(rows, key=itemgetter('fname'))
pprint.pprint(rows_by_fname)
pprint.pprint(rows_by_fname)
print(min_item)
print(max_item)

Python-数据类型之字典的更多相关文章

  1. python数据类型:字典Dictionary

    python数据类型:字典Dictionary 字典是一种可变容器模型,可以存储任意类型对象 键是唯一的,但是值不需要唯一 值可以取任何数据类型,但是键必须是不可变的,如字符串,数字,元组 创建字典: ...

  2. Python数据类型-6 字典

    字典 Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度.但它是无序的,包含的元素个数不限, ...

  3. Python数据类型(字典和集合)

    1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...

  4. python 数据类型三 (字典)

    一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...

  5. Python数据类型-04.字典

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据 ------------ 完美的分割线 ------------- 1.字典引入 # 为何还要用字典?存放一个人的信 ...

  6. Python数据类型(字典)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 字典(Dictionary) 字典 ...

  7. python数据类型之字典操作

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由key和value成对组成.基本语法如下: infos = {"name&q ...

  8. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之字典类型(dict)

    字典!在Python中字典是另一种可变容器模型,可以存储任意类型的对象.是Python存储数据类型的最高级(maybe). 特点:1. 字典的存储方式和其他类型数据略有不同,是通过键(key)和值(v ...

  9. Python学习(六) Python数据类型:字典(重要)

    字典dict: 字典其实就相当于java里面的Map,用来存储键值对的.其中存储的数据时无序的. 假如有这样的数据: t1=['name','age','sex'] t2=['tom',30,'mal ...

  10. python 数据类型 之 字典

    python 3.6.5字典的特性和定义定义:{'key_1':vlaue_1,'key_2':value_2}1.键与值用冒号 : 分开2.项与项 用 , 分开 特性1.可以存放多个值,可以不唯一, ...

随机推荐

  1. js的数组的一些操作

    1 arr.reduce let xxx = arr.reduce( function (pv, cv, ci ,arr) { return }[, init_val] ) 对arr的每个元素,执行匿 ...

  2. Python基础学习笔记4-28(持续更新)

    Python学习笔记 第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信.需要操作系统进行协调 ...

  3. 【洛谷P3649】回文串

    题目大意:给定一个长度为 N 的字符串,定义一个变量为该字符串的回文子串长度乘以该字串出现的次数,求这个变量的最大值是多少. 题解:学会了回文自动机. 回文自动机是两棵树组成的森林结构,并通过 fai ...

  4. MySql数据库字段排序规则不一致产生的一个问题

    最近项目向MySql迁移,迁移完毕后,在获取用户权限时产生了一个异常,跟踪进去获取执行的语句如下, SELECT PermissionId FROM spysxtPermission WHERE (R ...

  5. java 判断语句和循环语句

    一.判断语句:if和switch if(关系表达式1) { 语句体1; }else if (关系表达式2) { 语句体2; }…else { 语句体n+; } switch(表达式) { case 值 ...

  6. I2C(三) linux3.4(内核分析)

    目录 I2C(三) linux3.4(内核分析) (一)总线流程 bus.probe match i2c_device_probe (二)client注册 方式(一)静态加载 方式(二)指定设备 方式 ...

  7. Linux下nc命令的使用

    nc命令的作用 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口 端口的扫描,nc可以作为client发起TCP或UDP连接 机器之间传输文件 机器之间网络测 ...

  8. java频繁new对象的优化方案

    在实际开发中,某些情况下,我们可能需要频繁去创建一些对象(new),下面介绍一种,我从书上看到的,可以提高效率的方法. 首先,对于将会频繁创建的对象,我们要让这个类实现Cloneable接口,因为这个 ...

  9. Angular记录(9)

    文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...

  10. CSS部分语法1

    <!-- 第1部分 CSS规则特性 1 继承性:父元素样式可以被子元素继承,一般只能继承颜色和字体: 2 层叠性:给一个元素设置不同声明,效果会叠加: 3 优先级:给同一个元素设置相同声明,效果 ...