python字典中的键是什么

字典的键

字典中的值没有任何限制, 可以是任意Python对象,即从标准对象到用户自定义对象皆可,但是字典中的键是有类型限制的。

(1)不允许一个键对应多个值 必须明确一条原则:每个键只能对应一个项。也就是说:一键对应多个值是不允许的(像列表、元组和其他字典这样的容器对象是可以的)。 当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值。Python并不会因字典中的键存在冲突而产生一个错误,它不会检查键的冲突是因为如果真这样做的话,在每个键-值对赋值的时候都会做检查,这将会占用一定量的内存。

>>> dict1 = {'foo':789, 'foo': 'xyz'}

>>> dict1

{'foo': 'xyz'}

>>> dict1['foo'] = 123

>>> dict1

{'foo': 123}

(2)键必须是可哈希的

大多数Python对象可以作为键,但它们必须是可哈希的对象。像列表和字典这样的可变类型,由于它们不是可哈希的,所以不能作为键。

所有不可变的类型都是可哈希的,因此它们都可以做为字典的键。要说明的是:值相等的数字表示相同的键,即整型数字1和浮点数1.0的哈希值是相同的,它们是相同的键。

同时,也有一些可变对象(很少)是可哈希的,它们可以做字典的键,但很少见。举一个例子,一个实现了__hash__() 特殊方法的类。因为__hash__()方法返回一个整数,所以仍然是用不可变的值(做字典的键)。

为什么键必须是可哈希的?解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,它的值可改变。如果键发生变化,哈希函数会映射到不同的地址来存储数据。如果这样的情况发生,哈希函数就不可能可靠地存储或获取相关的数据。选择可哈希的键的原因就是因为它们的值不能改变。

数字和字符串可以被用做字典的键,元组是不可变的但也可能不是一成不变的,因此用元组做有效的键必须要加限制:若元

组中只包括像数字和字符串这样的不可变参数,才可以作为字典中有效的键。

示例:

# vi userpw.py

#!/usr/bin/env python

db = {}

def newuser():

prompt= 'please regist your name: '

while True:

name = raw_input(prompt)

if db.has_key(name):

prompt = 'name taken,try another: '

continue

else:

break

pwd = raw_input('passswd: ')

db[name] = pwd

print 'Newuser [%s] has added successfully!' %name

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: '''

while True:

try:

choice = raw_input(prompt).strip()[0].lower()

print '\nYou picked: [%s]' % choice

if choice not in 'neq':

print 'invalid option,please try again'

if choice == 'n':

newuser()

if choice == 'e':

olduser()

if choice == 'q':

break

except(EOFError,KeyboardInterrupt):

print 'invalid option,please try again'

if __name__ == '__main__':

showmenu()

(0)

相关推荐

  • #PY小贴士# 字典可以通过序号索引来访问?

    我们在学 python 中的 list 和 dict 时知道: list 是有序的,所以可以通过 list_a[0] 这样的方式通过索引(index)来访问列表中某个位置上的元素: dict 是无序的 ...

  • 快速查找,插入有序,从源码分析 Python 底层如何实现字典的这些特性

    在<RealPython 基础教程:Python 字典用法详解>这篇文章中,我们介绍了 dict 的特性: dict 是存储键值对的关联容器 dict 中的 key 是唯一的 可使用 di ...

  • Python 字典 dict() 函数

    不以物喜不以己悲 生活不会突变,你要做的只是耐心和积累.人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦.你的时间有限,做喜欢的事情会令人愉悦,所以跟随自己的本心. 目录 描述 语法 返回值 实 ...

  • python空字典怎么写

    字典是另外一种可变容器模子,且可存储恣意类型工具. 字典的每一个键值(key=>value)对用冒号(:)宰割,每一个对之间用逗号(,)宰割,整个字典包罗正在花括号({})中 . 格局以下所示: ...

  • Box-具有高级点符号访问权限的Python词典

    Box会自动将无法访问的键作为属性安全地进行访问.您始终可以将conversion_box = False传递给Box以禁用该行为.同样,添加到Box或BoxList对象的所有新字典和列表都将自动转换 ...

  • 使用纯 Python 代码来模拟实现 Python 字典

    在前面几篇文章中,我们一起了解了 Python 字典的概念.用法和实现原理. 今天,我们试着用 Python 代码来实现一个具有全功能的字典类,从而加强理解. [基本思路] 首先,我们要确认字典应具备 ...

  • Python字典中items()和iteritems()区别

    字典介绍: 一.字典概念 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是 ...

  • Python|字符串中第二大的数字

    问题描述给你一个混合字符串s,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回-1.混合字符串由小写英文字母和数字组成.示例:输入:s = 'dfa12321afd'输出:2解决方案这是一道 ...

  • python lxml中etree的简单应用

    这篇文章主要介绍了python lxml中etree的简单应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧我一般都是通过xpa ...

  • Excel中shift键的用法,无敌快捷键

    相信大家都知道,使用快捷键可以提升办公效率,那么你知道shift键的使用技巧吗?下面一起来看下shift快捷键的功能. 1.快速选择数据 如果选择数据比较多的单元格,常规的方法是慢慢拖动数据选择,那如 ...

  • 实例17:提取工作表数据到列表和字典中

    字数达到300字才算原创,所以加上几句废话,略过,略过.字数达到300字才算原创,所以加上几句废话,略过,略过.字数达到300字才算原创,所以加上几句废话,略过,略过.字数达到300字才算原创,所以加 ...

  • 用 Jupyter 学习 Python 字典 | Linux 中国

    原创 邀你一起成为开源贡献者 Linux中国 1周前   导读:字典数据结构可以帮助你快速访问信息. 本文字数:2152,阅读时长大约:3分钟 https://linux.cn/article-132 ...

  • Word、Excel、PPT中这个键太厉害!直接丢掉鼠标用它更霸气!

    向上滑动阅读 常见问题及解决方案 本公众号提供了数以万计的实用工具和教程,用户可以通过关注本公众号后,在底部栏目[软件目录]获取,如需进群交流,请关注我们后在底部栏目联系方式中获取微信群和QQ群,同时 ...

  • python字典

    近些年最长的五一小长假结束了,结束了,结束了...... 来一张照片抚慰一下想出去浪的心...... 字典在python中也是一种常用的数据类型. 它是一种可变容器模型,可用来存储任意类型的对象,如: ...

  • 怎么解决win7镜像中组合键,无法打开任务管理

    win7镜像中的任务管理器窗口是我们经常会使用到的一个功能,比如win7镜像出现卡顿的时候,长时间出现无响应的状态,这时候我们就需要启动任务管理器窗口,然后再将一些没用反应的程序关闭,还有的时候,咱们 ...