Python数据结构之字典
小练习之集合:列表 n1 = [1,3,5,7,12,14,16,18,23],计算任意元素相加为17的集合
if __name__ == '__main__':n1 = [1,3,5,7,12,14,16,18,23]list = []l = len(n1)for i in range(0, l - 1):for j in range(i + 1, l):if n1[i] + n1[j] == 17:n = (n1[i], n1[j])list.append(n)print(list)
1 字典
之前提到过,元组的优点是可以处理含有任意类型数据的序列,但其元素不可变会带了很多的限制。列表可以做元组可做的事情,处理的是成组的数据,本文所使用的字典是处理成对的数据,主要是通过一个数据匹配到另一个数据,并且效率极高。
先来看Hangman(一个猜单词的双人游戏),玩家猜错一次,计算机就会显示一张绞刑图片,如果最终没能猜对,最终的结果就是显示一个被绞死的人。如下图:
部分代码:
def hangman():word = get_valid_word(words)word_letters = set(word) # letters in the wordalphabet = set(string.ascii_uppercase)used_letters = set() # what the user has guessedlives = 7# getting user inputwhile len(word_letters) > 0 and lives > 0:print('You have', lives, 'lives left and you have used these letters: ', ' '.join(used_letters))word_list = [letter if letter in used_letters else '-' for letter in word]print(lives_visual_dict[lives])print('Current word: ', ' '.join(word_list))user_letter = input('Guess a letter: ').upper()if user_letter in alphabet - used_letters:used_letters.add(user_letter)if user_letter in word_letters:word_letters.remove(user_letter)print('')
对于Hangman游戏来说,既可以使用列表也可以使用字典实现(以上二者皆有使用,需要代码可以联系博主)。对于字典来说,字典的每个键值 key => value 对用 : 分隔开,整个字典会包含在 {} 中,一般如下(千万不要用dict作为变量名):
color = {'red' : 1, 'blue' : 2, 'green' : 3}
使用键来访问字典值的效率极高,即便字典包含数千个键 - 值对。同样的,字典也可以添加、修改或者删除数据元素。不过,字典也有两个限制:
1. 字典中的键必须是独一无二的,即在 同一个字典中,任何两个键值对的键都不能相同;
2. 键必须是不可变的。因此,字典键不能是列表,也不能是字典。因为键值对在字典中的存储位置是根据键计算得到的。即便键发生细微变化,键值对在字典中的位置也将变化。这可能导致键值对丢失或无法访问。
2 字典函数
Python对于字典的使用也内置了许多功能函数,具体如下表所示:
函数名 |
返回值含义 |
dict1.items() |
返回一个由字典 dict1 的键值对组成的视图 |
dict1.keys() |
返回一个由字典 dict1 的键组成的视图 |
dict1.values() |
返回一个由字典 dict1 的值组成的视图 |
dict1.get(key) |
返回与 key 相关联的值 |
dict1.pop(key) |
删除键 key 并返回与之相关联的值 |
dict1.popitem() |
删除字典 dict1 中的某个键值对并返回相应的键值 |
dict1.clear() |
删除字典 dict1 的所有元素 |
dict1.copy() |
复制字典 dict1 |
dict1.fromkeys(s, t) |
创建一个新字典,其中的键来自 s,值来自 t |
dict1.setdefault(key, v) |
如果键 key 包含在字典 dict1 中,则返回其值;否则,返回 v 并将 (key, v) 添加到字典 dict1 中 |
dict1.update(e) |
将 e 中的键 - 值对添加到字典 dict1中;e 可能是字典,也可能是键值对序列 |
部分示例如下:
同时,对于两个字典来讲,Python也实现了简单的字典比较功能函数,主要有cmp(dict1, dict2)、len(dict)、str(dict)、type(variable)。
在使用中在去感受下字典的需求,也就是上面所提到的使用字典的限制。陈述到这里,我们在回溯一下一开始提到的Hangman游戏,这个程序的代码量相比于开发是少很多的,或许重点更在于需要准备的绞刑图,如下:
希望感兴趣的同志们可以实现一下这个小游戏,需要实现的部分有三个:
1.上面提到的图;
2.随机选取的words;
3.hangman游戏的主体函数部分。
Hangman实现参考
1.绞刑图
view = {0: """___________| / | |/ ( )| || / \\|""",1: """___________| / | |/ ( )| || / |""",2: """___________| / | |/ ( )| || |""",3: """___________| / | |/ ( )| | |""",4: """___________| / | |/ | | |""",5: """___________| / |/ | | |""",6: """|||||""",7: "",}
2.words准备
words = ["aback","abaft","abandoned","abashed","aberrant","abhorrent","abiding","abject","ablaze"]
#数量自己定
3.功能函数部分
1.使用python库和上述两个代码段
import random
from practicce.hangman.words import words
from practicce.hangman.view import view
import string
2.随机从列表中选取word
def get_valid_word(words):word = random.choice(words) # randomly chooses something from the listwhile '-' in word or ' ' in word:word = random.choice(words)return word.upper()
3.功能函数实现
def hangman():word = get_valid_word(words)#随机选出的单词word_letters = set(word) alphabet = set(string.ascii_uppercase)#设置用户输入的单词used_letters = set() lives = 7while len(word_letters) > 0 and lives > 0:print('You have', lives, 'lives left and you have used these letters: ', ' '.join(used_letters))word_list = [letter if letter in used_letters else '-' for letter in word]print(lives_visual_dict[lives])print('Current word: ', ' '.join(word_list))user_letter = input('Guess a letter: ').upper()if user_letter in alphabet - used_letters:used_letters.add(user_letter)if user_letter in word_letters:word_letters.remove(user_letter)print('')else:lives = lives - 1 #print('\nYour letter,', user_letter, 'is not in the word.')elif user_letter in used_letters:print('\nYou have already used that letter. Guess another letter.')else:print('\nThat is not a valid letter.')if lives == 0:print(lives_visual_dict[lives])print('You died, sorry. The word was', word)else:print('Greate! You guessed the word', word, '!!')
Python数据结构之字典相关推荐
- python数据结构之字典(未完成)
字典 dic = {key:value} 1.字典特性 key必须是唯一的,值不必是唯一. 值可以是任何数据类型,比如list,tuple,字符,数值等.key只能是不可变的数据类型. 同一个key不 ...
- python数据结构之字典(dict)——超详细
字典(dict) 1.什么是字典 字典是具有映射关系的一个集合,有自己的标志性符号,用{}来定义.字典由多个键以及其对应的键值共同构成的,字典是无序的,只讲究对应关系,并且字典中的键是独一无二的 1. ...
- python 字典_Python数据结构:字典那些事儿
写在前面 本系列适合0基础的人食用,这是利用Excel学习Python系列的第5篇文章 之前的列表都复习好了吗:python数据结构:列表 are u ready?另一种数据结构:字典,要来了 字典( ...
- Python学习 数据结构列表字典元组
本章节我们主要结合前面所学的知识点来介绍Python数据结构. 1.元组结构(Tuple) 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串.数字甚至元组.元组创建后不能修改. 元组通常 ...
- python 映射表结构_Python 中常见的数据结构:字典、映射和散列表
在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...
- 从零开始学Python第13课:常用数据结构之字典
迄今为止,我们已经为大家介绍了Python中的三种容器型数据类型(列表.元组.集合),但是这些数据类型仍然不足以帮助我们解决所有的问题.例如,我们需要一个变量来保存一个人的多项信息,包括:姓名.年龄. ...
- 1.4、Python数据结构——字典(dict)
目录 1.定义字典 2.使用字典 2.1.访问字典,用键查找 2.2.修改字典 2.3.新增元素 2.4.删除元素 3.字典的其他操作 3.1.clear(),清空字典所有元素 3.2.copy(), ...
- Python基础编程——字典
前面介绍了序列,本节将介绍Python中唯一的内置映射类型-字典(dict),在字典中值不是按照索引来排列的,而是存储在指定的键下面,键可能是字符串.数字.元组等.Python中的字典类似于json格 ...
- python数据结构包括什么_Python中的数据结构详解
概述 在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容 了解Python提供的不同数据结构,包括列表.元组等 介绍 数据结构听起来是一个非常直截了当的话题,但许多数据 ...
最新文章
- 蓝湖怎么切图标注_【蓝湖指北】你真的会切图吗?
- 储存外部资源的Android项目子目录,Android资源使用
- 利用Azure communication service实现跟Teams同样等级的沟通协作应用
- 【渝粤教育】国家开放大学2018年春季 0283-21T广告创意与表现(二) 参考试题
- 作者:孟凡(1989-),男,中国科学院大学经济与管理学院、中国科学院大数据挖掘与知识管理重点实验室博士生...
- IDEA——修改idea64.exe.vmoptions文件解决coding卡顿问题
- 创建设计模式 - Builder设计模式
- 怎么用程序实现调用Android手机的拍照功能
- 雷军微博“导购”小米8 SE:名副其实的小屏旗舰!
- mybatis--一对一、一对多、多对多(七)
- 共享会话怎么设置没访问自动断开_谁总结的JavaWeb会话技术了?太全面了...
- 计算机硬件只能做维修吗,关于计算机硬件维修的研究
- CCF201409-3 字符串匹配(100分)
- 启动root用户 银河麒麟_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
- 在Java中用SHA1WithRSA创建的签名如何在.NET中验证
- ChromeOS+Win双系统安装教程
- 苹果服务器文件夹共享权限设置,苹果设备如何访问 Windows 文件共享?
- linux wgei目录,近 100 个 Linux 常用命令大全
- Scrum敏捷发布和预算管理
- 有料科普 | 三峡大坝怎么过船,无用但能吹牛皮的知识又增加了
热门文章
- 零基础如何挖掘漏洞?
- html的表格宽度单位选项,css表格宽度用什么设置?
- 基于Vue前端UI框架比较
- 鸿蒙os苹果ios对比,华为鸿蒙OS与苹果iOS测试,谁更流畅,真实对比大家看一下...
- siri捷径调用谷歌翻译_告诉它使用Google助理,以减少Siri的麻烦
- Shiro学习笔记-----小组开发前后端分离项目---登陆认证盐值加密
- log4j.additivity用法和例子
- outlook 设置 YAHOO.COM.CN信箱
- oracle dedicated server (),oracle share server DEDICATED server
- 计算机主机重启键,电脑重启快捷键是什么