python中的字典使用分享


Posted in Python onJuly 31, 2016

字典中的键使用时必须满足一下两个条件:

1、每个键只能对应一个项,也就是说,一键对应多个值时不允许的(列表、元组和其他字典的容器对象除外)。当有键发生冲突时(即字典键重复赋值),取最后的赋值。

>>> myuniversity_dict = {'name':'yuanyuan', 'age':18, 'age':19, 'age':20, 'schoolname':Chengdu, 'schoolname':Xinxiang}

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

NameError: name 'Chengdu' is not defined

>>> myuniversity_dict = {'name':'yuanyuan', 'age':18, 'age':19, 'age':20, 'schoolname':'Chengdu', 'schoolname':'Xinxiang'}

>>> myuniversity_dict

{'age': 20, 'name': 'yuanyuan', 'schoolname': 'Xinxiang'}

>>>

2、键必须是可哈希的,像列表和字典这样的可变类型,由于他们是不可哈希的,所以不能作为字典的键。

为什么呢?—— 解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,可以对键本身进行修改,那么当键发生变化时,哈希函数会映射到不同的地址来存储数据,这样哈希函数就不可能可靠地存储或获取相关的数据; 选择可哈希键的原因就是他们的值不能被改变。摘抄python 核心编程(第二版)的一个实例如下:

#!/usr/bin/env python

db = {}

def newuser():
  prompt = 'login desired: '
  while True:
    name = raw_input(prompt)
    if db.has_key(name):
      prompt = 'name taken, try another\n'
      continue
    else:
      break

  pwd = raw_input('passwd: ')
  db[name] = pwd

def olduser():
  name = raw_input('login: ')
  pwd = raw_input('passwd: ')

  passwd = db.get(name)
  if passwd == pwd:
    print 'welcome back', name
  else:
    print 'login incorrect'

def showmenu():
  prompt = """

(N)ew User Login
(E)xisting User Login
(Q)uit

Enter choice:"""
  done = False
  while not done:

    chosen = False
    while not chosen:
      try:
        choice = raw_input(prompt).strip()[0].lower()
      except:
        choice = 'q'
      print '\nYou picked: [%s]' % choice
      if choice not in 'neq':
        print 'invalid option, try again'
      else:
        chosen = True

    if choice == 'q':done = True
    if choice == 'n':newuser()
    if choice == 'e':olduser()

if __name__ == '__main__':
  showmenu()

运行结果:

[root@localhost src]# python usrpw.py 


(N)ew User Login
(E)xisting User Login
(Q)uit

Enter choice:n

You picked: [n]
login desired: root
passwd: 1


(N)ew User Login
(E)xisting User Login
(Q)uit

Enter choice:n

You picked: [n]
login desired: root
name taken, try another
Python 相关文章推荐
python中的__slots__使用示例
Feb 26 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
python实现redis三种cas事务操作
Dec 19 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
python3跳出一个循环的实例操作
Aug 18 Python
Python的collections模块真的很好用
Mar 01 Python
python3 sqlite3限制条件查询的操作
Apr 07 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 #Python
python3新特性函数注释Function Annotations用法分析
Jul 28 #Python
python中的格式化输出用法总结
Jul 28 #Python
Python中字符串的常见操作技巧总结
Jul 28 #Python
Python中不同进制的语法及转换方法分析
Jul 27 #Python
深入理解Python装饰器
Jul 27 #Python
python批量制作雷达图的实现方法
Jul 26 #Python
You might like
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
php 不同编码下的字符串长度区分
2009/09/26 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php多文件上传下载示例分享
2014/02/20 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
Pytorch的mean和std调查实例
2020/01/02 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
linux面试题参考答案(4)
2013/01/28 面试题
农村文化建设标语
2014/10/07 职场文书
2014年工程师工作总结
2014/11/25 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
自我检讨书怎么写
2015/05/07 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
信息技术课教学反思
2016/02/23 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
SQL基础的查询语句
2021/11/11 MySQL