精华内容
下载资源
问答
  • 1. 什么是字典呢? 字典是一种数据类型,他是通过键值对来进行数据存储。...健不能是可变对象,如列表,字典不能作为键。 字典中的键必须是唯一的,如果有重复的键,则以最后一个键的赋值准。 2. 字典的常用操.

    1. 什么是字典呢?

    字典是一种数据类型,他是通过键值对来进行数据存储。

    字典定义:dict1 = {'A':'Book','B':'Apple'}

    这里就定义了一个字典dict1,有两组元素。'A'和'B'就是键,'book'和'Apple'就是键对应的值。

    字典中的元素没有顺序,也就是说不存在下表的概念,键和值一定是成对存在。

    值可以是任何类型的数据。

    健不能是可变对象,如列表,字典不能作为键。

    字典中的键必须是唯一的,如果有重复的键,则以最后一个键的赋值为准。

     

    2. 字典的常用操作

    (1)通过赋值方式修改和新增字典

     如dict1 = {'A':'Book','B':'Apple'},需新元素。dic1['c']='Phone'

    如果字典中有这个元素,则是修改。如果没有这个元素,则是新增!

     

    (2)update方式修改和新增字典

    dic1.update({'D':'PC','E':'PC2'})

    1) 可以新增多个。

    2) 当元素存在,则也是修改原来元素的值。如果没有就是新增。

     

    (3) 清空和删除

    dic1={},这种方式内存中的地址改变了。

    dic1.clear() , 这种方式内存中的地址不变。

    del dic1['A']:删除键为A的键值对。通过del方法。

     

    (4) 判断是否或不在字典 : in or not in

    通过键来判断, 如

        if 'A' in dic1:

              print('A找到了!')

     

    (5) 获取所有的键:dic1.keys()

         这个返回值是类列表,不是真正的列表哦!!!

        当然可以通过list()函数进行转换,如 list(dic1.keys()),这样就变成了真正的列表了!

     

    (6) 获取所有的键:dic1.values()。

         这个返回值也是类列表。

     

    (7) 获取所有的键值对:dic1.items()。

         可以通过for循环进行遍历:

         for k,v in dic1.items():

              print('键:{}, 值:{}'.format(k,v))

     

    (8) 字典与JSON格式的转换

       JSON转成字典

    import json
    
    #定义一个JSON格式数据
    data = '''{
        "A":"TOM",
        "B":"JACK"
    }'''
    
    #JSON转成字典
    temp = json.loads(data)#使用loads函数把JSON格式数据转换成为字典
    print(type(temp))#<class 'dict'>
    print(temp)#{'A': 'TOM', 'B': 'JACK'}

       字典转成JSON

    import json
    
    #定义一个JSON格式数据
    data = '''{
        "A":"TOM",
        "B":"JACK"
    }'''
    
    #字典转换为JSON格式
    temp = json.loads(data)#使用loads函数把JSON格式数据转换成为字典
    print(type(temp))#<class 'dict'>
    JSONfile = json.dumps((temp))#通过dumps函数,把字典temp转换成JSON格式
    print(type(JSONfile))#<class 'str'>
    print(temp)#{'A': 'TOM', 'B': 'JACK'}

     

    (9) 从文件中读取JSON格式

    #从指定的文件中读取JSON格式数据
    with open('JSON.txt','r+') as file1:
        file1.seek(0)
        print('读取到的JSON文件:{}'.format(file1.read()))
        file1.seek(0)
        temp = json.load(file1)#使用load函数,从file1中加载JSON格式数据,返回的是字典类型数据
        print(type(temp))#<class 'dict'>
        print('读取到的JSON文件:{}'.format(temp))#读取到的JSON文件:{'A': 'TOM', 'B': 'JACK'}

    JSON.txt文件内容如下:

    {
        "A":"TOM",
        "B":"JACK"
    }

    (10) 字典格式按照JSON格式存储到文件

    #字典数据按照JSON格式存储到文件中
    with open('JSON2.txt','w+') as file2:
        json.dump(json.loads(data),file2)#使用dump函数把字典temp存储到file2中
        file2.seek(0)
        print(file2.read())

     

     

    展开全文
  • 在学习集合时候,列表不能作为元素,又把我搞晕了,小甲鱼讲解这篇文章属实清楚,给我豁然开朗感觉。 转载正文 Python 的字典有好多个名称(“映射”、“哈希”、“散列"或者"关系数组”),那你知道为什么...

    写在前面
    单片机的C,Python,matlab三个语言把我搞得晕头转向,学习python也会出现前路堵死的感觉。在学习python里面的字典的时候,用变量作为key,总是报错,我也不知道为什么。在学习集合的时候,列表又不能作为元素,又把我搞晕了,小甲鱼讲解的这篇文章属实清楚,给我豁然开朗的感觉。
    转载正文

    你知道 Python 的字典(Dict)是如何存储的吗(作者:小甲鱼)
    Python 的字典有好多个名称(“映射”、“哈希”、“散列"或者"关系数组”),那你知道为什么字典会被称为 Hash(翻译为"哈希"或"散列")吗?

    你知道为什么字典对于键(Key)的存储数据要求比较严格,但对于对应的值(Value)的存储却要求很宽松吗?

    读完这篇文章,你将深刻理解这些问题背后的真相!

    首先我们来解释一下什么是 Hash,来自维基百科:

    散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

    世界上没有两片完全相同的树叶,也没有两个相同的指纹,散列函数是用于从数据中创建小的数字指纹的方法。

    我们看下图示:
    在这里插入图片描述

    如图,Python 调用内部的散列函数,将键(Key)作为参数进行转换,得到一个唯一的地址(这也就解释了为什么给相同的键赋值会直接覆盖的原因,因为相同的键转换后的地址是一样滴),然后将值(Value)存放到该地址中。

    对于 Python 来说,键(Key)必须是可哈希的,换句话说就是要可以通过散列函数计算出唯一地址的。那如果拿一个变量当键(Key)可以吗?肯定不行。因为变量随时都可能改变,不符合可哈希原则!

    同样的,列表、字典、集合这些都是可变的,所以都不能做为键(Key)来使用。

    那有朋友可能会问,那元祖呢?元祖总该是不变的吧?

    其实不然,因为元祖里边可以存放列表这类可变因素,所以如果实在想拿元祖当字典的键(Key),那必须对元祖做限制:元组中只包括像数字和字符串这样的不可变元素时,才可以作为字典中有效的键(Key)。

    另外还需要注意的一点是,Python 的哈希算法对相同的值计算得到的结果是一样的,也就是说 12315 和 12315.0 的值相同,他们被认为是相同的键(Key)。
    关于集合

    在这里插入图片描述
    其实就是根据哈希算法映射到了地址,然后一个同样的数据过来就会重新映射到该地址,所以不会产生重复

    展开全文
  • 有个例外是但元组作为字典的键时,在这种情况下,因为键不可修改,所以就不能使用列表。 我们在一些统计工作或者分析过程中,有事会遇到要统计一个序列中出现最多次的元素,比如一段英文中,查询出现最多的词是什么...
  • 我有很长一段代码。我想把它们都贴在这里,所以让我来解释一下我要在这里完成...列表为空,或者只包含最后一个文本框作为每个键的值。在def multiple_choice():def add():top.destroy()top = Tk()top.title("Add...

    我有很长一段代码。我不想把它们都贴在这里,所以让我来解释一下我要在这里完成什么。基于用户提供的一个数字,我想创建那么多的文本框,然后获取输入到文本框中的内容并将其插入字典。我试过几种方法,就是不能让它正常工作。列表为空,或者只包含最后一个文本框作为每个键的值。在def multiple_choice():

    def add():

    top.destroy()

    top = Tk()

    top.title("Add Question")

    w = 800

    h = 800

    ws = top.winfo_screenwidth()

    hs = top.winfo_screenheight()

    x = (ws/2) - (w/2)

    y = (hs/2) - (h/2)

    top.geometry('%dx%d+%d+%d' % (w, h, x, y))

    question = Label(top, text="Question to be asked?", font = "Times 14 bold", fg = "blue")

    question.grid(row = 2, column = 4)

    questionText = Text(top, borderwidth = 5, width=50,height=5, wrap=WORD, background = 'grey')

    questionText.grid(row = 3, column = 4)

    numQuestions = Label(top, text = "Number of answer choices?", font = "Times 14 bold", fg = "blue")

    numQuestions.grid(row = 4, column=4)

    num = Entry(top, bd = 5)

    num.grid(row=5, column = 4)

    answerList = {}

    def multiple():

    def preview():

    preview = Tk()

    top.title("Question Preview")

    w = 500

    h = 500

    ws = top.winfo_screenwidth()

    hs = top.winfo_screenheight()

    x = (ws/2) - (w/2)

    y = (hs/2) - (h/2)

    top.geometry('%dx%d+%d+%d' % (w, h, x, y))

    title = Label(preview, text = "Short Answer Question Preview", font = "Times 18 bold", fg = "blue" )

    title.grid(row = 0, column = 2)

    qtext = "Question text will read: "

    ques = Label(preview, text = qtext)

    ques.grid(row=1, column = 2)

    ques2 = Label( preview, text = questionText.get("1.0",END))

    let = 'A'

    i = 1

    for word in answerList:

    prev = let + ": " + word

    ans = Label(preview, text = prev)

    ans.grid(row=1+i, column = 2)

    let = chr(ord(let) + 1)

    answerCor = "The correct answer(s): "

    a = Label(preview, text = answerCor)

    a.grid(row=4, column = 2)

    b = Label(preview, text = cor.get)

    b.grid(row=5, column = 2)

    if num.get().isdigit():

    number = int(num.get())

    AnswerChoices = Label(top, text = "Answer Choices?", font = "Times 14 bold", fg = "blue")

    AnswerChoices.grid(row = 6, column=4)

    i = 0

    let = 'A'

    while i < number:

    letter = Label(top, text = let)

    letter.grid(row = 8+(i*4), column = 3)

    answer = Text(top, borderwidth = 5, width=50, height=3, wrap=WORD, background = 'grey')

    answer.grid(row = 8+(i*4), column = 4)

    answerList[let] = answer.get("1.0",END)

    i = i+1

    let = chr(ord(let) + 1)

    print answerList

    correct = Label(top, text = "Correct Answer(s) (seperated by commas)",

    font = "Times 14 bold", fg = "blue")

    correct.grid(row =99 , column=4)

    cor = Text(top, borderwidth = 5, width=50, height=3, wrap=WORD, background = 'grey')

    cor.grid(row=100, column = 4)

    else:

    error = Tk()

    w = 500

    h = 100

    ws = top.winfo_screenwidth()

    hs = top.winfo_screenheight()

    x = (ws/2) - (w/2)

    y = (hs/2) - (h/2)

    error.geometry('%dx%d+%d+%d' % (w, h, x, y))

    text = "ERROR: You must enter an integer number"

    Label(error,text = text, fg = "red", font = "Times 16 bold").pack()

    MyButton5 = Button(top, text="Preview Question", width=20, command = preview, anchor=S)

    MyButton5.grid(row=102, column=5)

    MyButton4 = Button(top, text="Finish and Add Question", width=20, command = add, anchor=S)

    MyButton4.grid(row=102, column=2)

    but = Button(top, text="Submit", width=10, command = multiple)

    but.grid(row=6, column = 4)

    top.mainloop()

    def button():

    MyButton21 = Button(quiz, text="Short Answer Question", width=20, command = short_answer)

    MyButton21.grid(row=8, column=2)

    MyButton22 = Button(quiz, text="True/False Question", width=20, command = true_false)

    MyButton22.grid(row=8, column=4)

    MyButton23 = Button(quiz, text="Multiple Choice Question", width=20, command = multiple_choice)

    MyButton23.grid(row=9, column=2)

    #MyButton24 = Button(quiz, text="Matching Question", width=20, command = matching)

    #MyButton24.grid(row=9, column=4)

    MyButton25 = Button(quiz, text="Ordering Question", width=20, command =order)

    MyButton25.grid(row=10, column=2)

    MyButton26 = Button(quiz, text="Fill in the Blank Question", width=20, command = fill_blank)

    MyButton26.grid(row=10, column=4)

    MyButton3 = Button(quiz, text="Finsh Quiz", width=10, command = quiz)

    MyButton3.grid(row=12, column=3)

    quiz = Tk()

    w = 700

    h = 300

    ws = quiz.winfo_screenwidth()

    hs = quiz.winfo_screenheight()

    x = 0

    y = 0

    quiz.geometry('%dx%d+%d+%d' % (w, h, x, y))

    quiz.title("eCampus Quiz Developer")

    L1 = Label(quiz, text="Quiz Title?")

    L1.grid(row=0, column=0)

    E1 = Entry(quiz, bd = 5)

    E1.grid(row=0, column=3)

    name_file = E1.get()

    name_file = name_file.replace(" ", "")

    name_file = name_file + ".txt"

    with open(name_file,"w") as data:

    MyButton1 = Button(quiz, text="Submit", width=10, command = button)

    MyButton1.grid(row=1, column=3)

    quiz.mainloop()

    我正在尝试使用以下代码创建词典:

    ^{pr2}$

    我甚至尝试过在preview函数中添加一个循环,但就是在最后一个框是字典中唯一包含的值的时候。任何想法都将不胜感激

    展开全文
  • 1.1.6 从innodb索引结构分析,为什么索引 key 长度不能太长 1.1.7 MySQL数据如何恢复到任意时间点? 1.1.8 NFS 和 SMB 是最常见两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 ...
  • 《CSDN开发助手》是一款依托开发者社区开发小工具,运营得当,会有极好发展前景,有人说《CSDN开发助手》就是一个缝合怪,但如果《CSDN开发助手》愿意把 tampermonkey 功能也缝合进来,真会成为一款老少皆...
  •  删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services中所有以oracle或OraWeb开头的键。  删除HKEY_LOCAL_MACHINE/SYSETM/CurrentControlSet/Services/Eventlog/application中所有以oracle开头的键。 ...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    可以利用通配符创建比较特定数据搜索模式,通配符只能用于文本,非文本数据类型不能使用通配符。 通配符在搜索模式中任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索...
  • 但是DBA要求是稳定压倒一切,DBA必须去适应自己所使用产品,而不能期待产品去适应自己,更没有机会去改变产品,因此了解这个产品工作原理是非常必要。  现在网络发达,遇到问题时,有论坛、BBS各种渠道...
  •  本书针对大多数日常oracle database 11g数据库管理任务,全面覆盖dba行业知识,并将理论与实践相结合,旨在初中级dba提供高效运行数据库所需方方面面知识,帮助他们从oracle公司发行大量资料中找到自己...
  • 9.5.3 为什么不能分配一个新日志 289 9.5.4 块清除 291 9.5.5 日志竞争 294 9.5.6 临时表和redo/undo 296 9.6 分析undo 299 9.6.1 什么操作会生成最多和最少undo 299 9.6.2 ORA-01555: snapshot too old ...
  • 9.5.4 为什么不能分配一个新日志? 310 9.5.5 块清除 312 9.5.6 日志竞争 315 9.5.7 临时表和redo/undo 317 9.6 分析undo 321 9.6.1 什么操作会生成最多和最少undo? 321 9.6.2 ORA-01555: snapshot too old...
  • asp.net知识库

    2015-06-18 08:45:45
    对页面SCROLLINGCSS不能生效原因 .Net 中IE使用WinForm控件使用心得。 动态加载用户控件组件!(终结MasterPages技术) 在ASP.NET 1.1下实现模板化站点新思路 在ASP.Net中两种利用CSS实现多界面方法 用于...
  • 同时,书中200多个范例均可作为开发样板,以此抛砖引玉,进而拓展程序设计人员开发MID无限可能。精彩范例,原创展现。 更炫移动设备人机界面配置:豪华Widget、Home Screen App Widgets、隐藏式抽屉-Sliding ...
  • 同时,书中200多个范例均可作为开发样板,以此抛砖引玉,进而拓展程序设计人员开发MID无限可能。精彩范例,原创展现。 更炫移动设备人机界面配置:豪华Widget、Home Screen App Widgets、隐藏式抽屉-Sliding ...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    1.8.6 应用程序束中存在文件 20 1.8.7 IPA归档 20 1.8.8 沙盒 20 1.9 编程范例 21 1.9.1 面向对象编程 21 1.9.2 模型—视图—控制器 22 1.10 小结 27 第2章 构建第一个项目 28 2.1 创建新项目 28 2.2 ...
  • 字典的基本用法 - 字典的特点 / 创建字典 / 添加元素 / 删除元素 / 取值 / 清空 字典常用操作 - keys()方法 / values()方法 / items()方法 / setdefault()方法 基础练习 - 跑马灯效果 / 列表找最大元素 / 统计考试...
  • 151.8.5 与Office 2000相关改进 151.9 安装Access 2000 171.9.1 Access 2000初始安装 171.9.2 定制Access 2000 201.10 安装和配置Microsoft数据引擎 20 1.11 现实世界—为什么升级 23第2章 建立第一个Access ...
  • 151.8.5 与Office 2000相关改进 151.9 安装Access 2000 171.9.1 Access 2000初始安装 171.9.2 定制Access 2000 201.10 安装和配置Microsoft数据引擎 20 1.11 现实世界—为什么升级 23第2章 建立第一个Access ...
  • 151.8.5 与Office 2000相关改进 151.9 安装Access 2000 171.9.1 Access 2000初始安装 171.9.2 定制Access 2000 201.10 安装和配置Microsoft数据引擎 20 1.11 现实世界—为什么升级 23第2章 建立第一个Access ...
  • 151.8.5 与Office 2000相关改进 151.9 安装Access 2000 171.9.1 Access 2000初始安装 171.9.2 定制Access 2000 201.10 安装和配置Microsoft数据引擎 20 1.11 现实世界—为什么升级 23第2章 建立第一个Access ...
  • 4.3.4 为什么称作“关系” 33 4.4 一些通用、常见示例 35 4.5 风险所在 36 4.6 新视角重要性 37 4.6.1 变化环境 38 4.6.2 代码、缩写和命名标准 38 4.7 如何减少混淆 39 4.7.1 规范化 40 4.7.2 表...
  • // 为什么会出现这种排序结果呢❓ // 因为在忽略sortFn情况下,元素会按照转换为字符串各个字符Unicode位点进行排序,如下 let equalValues = ['0', '1', '5', '...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

列表为什么不能作为字典的键