Python中set 和 dictionary 有什么联系呢?

2020-08-18 22:10发布

Python中set 和 dictionary 有什么联系呢?

Python中set 和 dictionary 有什么联系呢?

2条回答
乐xenia
2楼 · 2020-08-19 18:11

集合-set

  集合(set)是一类容器,元素没有先后顺序,并且元素的值不重复。
  集合的字面量用花括号{}
eg:

  • {1,5,7}

  • {'apple', 'orange', 'pear', 'banana'}

创建

  • 直接给变量赋值一个集合字面量
    fruit = {'apple', 'orange', 'pear', 'banana'}

  • 使用set()创建一个空集合
    emp = set()
    注:emp = {}    #创建一个空字典

  • 使用set()将列表或元组转换成集合
    prime = set([1,3,5,7,11])
    结果是:
    {1, 3, 5, 7, 11}

字典-dictionary (map)

  字典是一个用“键”做索引来存储的数据的集合。一个键和它所对应的数据形成字典中的一个条目。字典的key是用来做hash运算的,需要不可变对象,如数字、字符串、元组;可变的对象不可以作为key,如list、dictionary、set

创建字典

  • 用花括号{ } 来表示,每个元素用冒号分隔键和数据。可以用{}或者dict()来创建空字典。

students = {3180101:’张三’, 3180102:’李四’, 3180105:’王五’, 3180110:’赵六’}
d={'math': '0001', 'python': '0002', 'c': '0003'}

d=dict([("math","0001"),("python","0002"),("c","0003")])

d=dict(math="0001",python="0002",c="0003")

字典的基本运算

  • 访问和修改条目
    直接用[ ]运算符,用<字典> [键]的形式,访问键所对应的数据。

score = {'张三':78, '李四':92}
print(score['张三'])#访问score中键为'张三'的数据score['李四'] = 89#把score中键为'李四'的数据修改为89score['王五'] = 100#score中没有键为‘王五’的元素,则增加一项,键为’王五’,数据为100。print(score)
输出:78{'张三': 78, '李四': 89, '王五': 100}

  • 删除条目
    del dictName[key]
    如果key不存在,会抛出KeyError异常

  • 遍历字典

# 循环score = {'张三':78, '李四':92, '王五':89}for name in score:
    print(name + ':' + str(score[name]))#用items()for key,value in score.items():
   print(key + ':' + str(value))
输出:
张三:78李四:92王五:89

  • 字典的大小len()

  • 检测,in 和not in检测key是否在字典中

  • 用==和!=比较2个字典是否相同(键和值都相同)


我的网名不再改
3楼 · 2020-08-21 13:21

Table of Contents generated with DocToc

  • ditctaionary and set

    • 创建字典

    • 字典的基本运算

    • 创建

    • 操作和访问集合的元素

    • 子集、超集、相对判断

    • hash 介绍

    • 集合-set

    • 字典-dictionary (map)

    • 可变对象和不可变对象

    • 应用

    • 参考文档

    ditctaionary and set

    hash 介绍

      hash是计算机中非常常见一种查找的手法,它可以支持常数时间的insert、remove、find,但是对于findMin、findMax、sort等操作就支持的不是很好,具体是为什么呢;

      hash其实是通过key来找value的,可以这样简单的理解为value都被存在一个数组之中,每次你用key计算一下可以得到相应数组的下标,即 index=f(key) 是不是一下子就找到元素所在位置了呢!

    集合-set

      集合(set)是一类容器,元素没有先后顺序,并且元素的值不重复。
      集合的字面量用花括号{}
    eg:

    • {1,5,7}

    • {'apple', 'orange', 'pear', 'banana'}

    创建

    • 直接给变量赋值一个集合字面量
      fruit = {'apple', 'orange', 'pear', 'banana'}

    • 使用set()创建一个空集合
      emp = set()
      注:emp = {} #创建一个空字典

    • 使用set()将列表或元组转换成集合
      prime = set([1,3,5,7,11])
      结果是:
      {1, 3, 5, 7, 11}

    操作和访问集合的元素

    可以用add()和remove()添加和删除集合元素
    可以用min()、max()、len()和sum()对集合操作。
    集合内的元素是无序的,所以不能像列表那样通过下标来访问集合元素。

    • 用循环实现遍历集合中的各个元素

    s = {2,3,5,7,11}for i in s:
        print(i,end='')#输出:#235711
    • 运算符in和not in 用于判断某个元素是否在集合中。

    s = {2,3,5,7,11print(5 in s)
    print(4 not in s)
    输出:TrueTrue

    子集、超集、相对判断

    • 如果集合s1中的元素,同样都在集合s2中,则称s1为s2的子集,s2为s1的超集。
      使用s1.issubset(s2)来判断s1是否为s2的子集。
      使用s2.issuperset(s1)来判断s1是否为s2的超集。

    s1 = {2,3,5,7}
    s2 = {1,2,3,4,5,6,7}
    print(s1.issubset(s2))
    print(s2.issuperset(s1))
    输出:TrueTrue
    • 使用关系运算符==和!=
      - 判断2个集合包含的元素完全相同与否。

    • 使用关系运算符<,<=,>,>=。
      - 如果s1是s2的真子集,则s1- 如果s1是s2的子集,则s1<=s2是True
      - 如果s1是s2的真超集,则s1>s2是True
      - 如果s1是s2的超集,则s1>=s2是True
      - 注:s1是s2的真子集的意思是s1是s2的子集,但是s2中至少有一个s1中不存在的元素; s1是s2的真超集的意思是s1是s2的超集,但是s1中至少有一个s2中不存在的元素。

    • 通过集合的函数或运算符进行集合的并集、交集、差集和对称差的集合运算。

    运算函数运算符说明
    并集union()|同数学中的并集
    交集intesection()&同数学交集
    差集difenrence()-s1-s2出现在s1不出现在s2
    对称差symmertric_diference()^s1^s2=s1

    字典-dictionary (map)

      字典是一个用“键”做索引来存储的数据的集合。一个键和它所对应的数据形成字典中的一个条目。字典的key是用来做hash运算的,需要不可变对象,如数字、字符串、元组;可变的对象不可以作为key,如list、dictionary、set

    创建字典

    • 用花括号{ } 来表示,每个元素用冒号分隔键和数据。可以用{}或者dict()来创建空字典。

    students = {3180101:’张三’, 3180102:’李四’, 3180105:’王五’, 3180110:’赵六’}
    d={'math': '0001', 'python': '0002', 'c': '0003'}
    
    d=dict([("math","0001"),("python","0002"),("c","0003")])
    
    d=dict(math="0001",python="0002",c="0003")

    字典的基本运算

    • 访问和修改条目
      直接用[ ]运算符,用<字典> [键]的形式,访问键所对应的数据。

    score = {'张三':78, '李四':92}
    print(score['张三'])#访问score中键为'张三'的数据score['李四'] = 89#把score中键为'李四'的数据修改为89score['王五'] = 100#score中没有键为‘王五’的元素,则增加一项,键为’王五’,数据为100。print(score)
    输出:78{'张三': 78, '李四': 89, '王五': 100}
    • 删除条目
      del dictName[key]
      如果key不存在,会抛出KeyError异常

    • 遍历字典

    # 循环score = {'张三':78, '李四':92, '王五':89}for name in score:
        print(name + ':' + str(score[name]))#用items()for key,value in score.items():
       print(key + ':' + str(value))
    输出:
    张三:78李四:92王五:89
    • 字典的大小len()

    • 检测,in 和not in检测key是否在字典中

    • 用==和!=比较2个字典是否相同(键和值都相同)

    • 字典常用函数

    函数说明
    keys()返回由全部key组成的序列
    values()返回由全部值组成的序列
    items()返货一个序列,每一项都是一个tuple,(key,value)
    clear()删除所有条目
    get(key,value)返回这个键所对应的值,如找不到返回value
    pop(key)返回这个键所对应的值,同时删除这个条目

    可变对象和不可变对象

    可变对象和不可变对象是Python语言的核心概念。

    • 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

    • 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址。

    • 不可变数据类型创建不可变对象,可变数据类型创建可变对象

    • 可变类型有:列表、集合、字典

    • 不可变类型有:整数、浮点数、复数、字符串、逻辑量(True False)、元组

    • 不同数据类型对象和逻辑值的变换

      数据类型TrueFalse
      整数非00
      浮点数非00.0
      复数非00+0j
      字符串非空""
      逻辑量TrueFalse
      列表非空[]
      元组非空()
      集合非空set()
      字典非空{}

    应用

    set

    • 列表去重

    #去重,但不能保证保持原有顺序mailto = ['cc', 'bbbb', 'afa', 'sss', 'bbbb', 'cc', 'shafa']
    addr_to =list(set(mailto))
    print(addr_to)#result ['shafa', 'cc', 'sss', 'afa', 'bbbb']#排序后保证保持原有顺序addr_to.sort(key = mailto.index)
    print(addr_to)#result ['cc', 'bbbb', 'afa', 'sss', 'shafa']

    找鞍点

    n=int(input())
    a=[]for i in range(0,n):
          b=input().split()
          a.insert(i,b)
    c=[]
    d=[]for i in range(0,n):
        maxa=max(int(a[i][j]) for j in range(n))
        mina=min(int(a[k][i]) for k in range(0,n))
        c+=[(i,j) for j in range(n) if int(a[i][j])==maxa]
        d+=[(k,i) for k in range(n) if int(a[k][i])==mina]
    c=list(set(c)&set(d))if (c!=[]):
       print(c[0])else:
       print("NONE")

    dictionary

    • 字典替代分支语言

    #输入一个1到7的数字,输出对应的星期名的缩写days={1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"}
    num=int(input())
    print(days[num])
    
    result={"+":"x+y","-":"x-y","*":"x*y","/":'''x/y if y!=0   \
            else "divided by zero"'''}
    x=int(input())
    z=input().strip()
    y=int(input())
    r=eval(result.get(z))#计算表达式的值if type(r)!=str:
        print(format(r,'.2f'))else:
        print(r)
    • 字典计数

    eg:1

    #输入一行字符,求字符”a”,”b”和”c”出现的次数diccount={char:0 for char in "abc"}   #字典初始化s=input()
    lst=[char for char in s if  
          ord("a")<=ord(char)<=ord("c")]for char in lst:
        diccount[char]+=1print(diccount)

    eg2:

    #输入一行字符,求每个字符出现的次数#建字典dicchar,键是字符,值是字符出现的次数。由于不能预知出现哪些字符,所以不能预先初始化字典#注意字典的get函数:get() 函数返回指定键的值,如果值不在字典中返回默认值。countchar.get(c,0)函数返回键为c的值, 不在字典中返回0。str=input()
    countchar={}for c in str:
        countchar[c]=countchar.get(c,0)+1print(countchar)

    eg:

    #求列表中两数之和等于指定数的下标'''
    Given nums = [2, 11,7, 15], target = 9,
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 2].
    '''nums = [2, 6, 11, 15,7,8]
    target = 9hm = dict()for i in range(len(nums)):    if nums[i] in hm:
            print(hm[nums[i]], i)        break
        hm[target - nums[i]] = i
    print([2, 6, 11, 15,7,8])
    print(hm)
    • 字典列表嵌套

    books=[
            {"name":u"C#从入门到精通","price":25.7,"store":u"卓越"},
            {"name":u"ASP.NET高级编程","price":44.5,"store":u"卓越"},
            {"name":u"Python核心编程","price":24.7,"store":u"当当"},
            {"name":u"JavaScript大全","price":45.7,"store":u"当当"},
            {"name":u"Django简明教程","price":26.7,"store":u"新华书店"},
            {"name":u"深入Python","price":55.7,"store":u"新华书店"},
          ]
    
    print(min([item["price"] for item in books ]))#24.7books[0]['name']#C#从入门到精通
    • 字典嵌套

    users = {'aeinstein': {'first': 'albert',                       'last': 'einstein',                       'location': 'princeton'},         'mcurie': {'first': 'marie',                    'last': 'curie',                    'location': 'paris'},
             }for username, user_info in users.items():
        print("\nUsername: " + username)
        full_name = user_info['first'] + " " + user_info['last']
        location = user_info['location']
    
        print("\tFull name: " + full_name.title())
        print("\tLocation: " + location.title())    '''
    Username: aeinstein
    Full name: Albert Einstein
    Location: Princeton
    
    Username: mcurie
    Full name: Marie Curie
    Location: Paris
        '''
    • 图和字典

    # %% 求图的顶点数,边数,边的总长  空字典{},空集合 set()d={"start": {1:1,2:2,3:4},  #第一个点为“start”,一条边指向1,长度为1,一条指向2,长度为2,一条指向3,长度为4
       1:{3:5},   2:{"end":8,3:78},   3:{2:4,"end":8},   "end":{}   }
    v=set();     e=set()    ;s=0           #顶点的集合,边点的集合for key,value in d.items():
        v.add(key)    if type(value)==dict:        for key1,value1 in value.items():
                v.add(key1)
                e.add((key,key1))
                s+=value1
    
    print(len(v),len(e),s)#5 8 110
    • 组装字典

    id = "IAD"location = "Dulles Intl Airport"max_temp = 32min_temp = 13precipitation = 0.4print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format(
       id=id, location=location, max_temp=max_temp,
       min_temp=min_temp, precipitation=precipitation))
    
    data = dict(
           id=id, location=location, max_temp=max_temp,
           min_temp=min_temp, precipitation=precipitation
           )
    print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format_map(data))#IAD : Dulles Intl Airport :  32 /  13 / 0.40#IAD : Dulles Intl Airport :  32 /  13 / 0.40#date={'id': 'IAD', 'location': 'Dulles Intl Airport', 'max_temp': 32, 'min_temp': 13, 'precipitation': 0.4}


    相关问题推荐

    • 回答 5

      python中单行注释采用 #开头示例:#this is a comment二、批量、多行注释符号多行注释是用三引号,例如:输入&#39;&#39;&#39; &#39;&#39;&#39;或者 ,将要注释的代码插在中间三、Windows下的IDLE的注释快捷键是Alt+3,取消注释是Alt+4四、python中文注释方法...

    • 回答 3

      apply

    • 回答 3

      标准库Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库的主要功能有:1.文本处理,包...

    • 回答 6

      Python Lambda函数是没有任何名称的函数。它们也称为匿名或无名功能。 lambda一词不是名称,而是关键字。此关键字指定后面的函数是匿名的。现在您已经知道这些匿名函数指的是什么,让我们进一步了解一下如何编写这些Python Lambda函数。...

    • 回答 18

      Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,...

    • 回答 4

      深度学习工程师就业路径目前,成为深度学习工程师有两条路径:一是通过春秋两季的校园招聘,另一种是借助社会招聘跨行业转型。前述文章曾经将深度学习工程师分为算法工程师、后端工程师和前端工程师。综合目前市面上各大公司招聘和咨询报告结果,目前工作3-5...

    • 回答 19

      零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言。此外,python在机器学习,人工智能领域也非常流行,算得上是算法工程师的标配编程语言。...

    • 回答 10

      包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。python库是参考其它编程语言的说法,就是指python中的完成...

    • 回答 5

      1、len(mapping)        返回映射的长度(键-值对的个数)2、hash(obj)              返回obj的哈希值>>> myDict = {&#39;name&#39;:&#39;earth&#39;, &#39;port&#39;:&#39;80&#39;} >>> len(myDict) 2 >>> hash(&#39;name&#39;) 1...

    • 回答 7

      常用内建属性说明触发方式__init__构造初始化函数创建实例后,赋值时使用,在__new__后__new__生成实例所需属性创建实例时__class__实例所在的类实例.__class____str__实例字符串表示(可读性)print(类实例),如没实现则使用repr结果__repr__实例字符串表示...

    • 回答 4

      ‘‘‘关键字:False:bool数据类型True:bool数据类型None:表示数据的内容为空and:逻辑运算符:与or:逻辑运算符:或not:逻辑运算符:非in:身份运算符,判断变量是否在序列中is :成员运算符,判断变量是否为某个类的实例del:删除变量或序列的值assert:列...

    • 回答 8

      函数注释语法函数注释包括:参数注释:以冒号(:)标记返回值注释:以 -> 标记语法结构大体如下:1、def foo(a: expression, b: expression = 5) -> expression:2、 ...在伪语法中,参数看起来像:identifier [: expression] [= expression]。也就是说,参数...

    • 回答 6

      OpenDoor变量的命名: year_month_day = 2020-7-24 这样写以后都会写很多单词,比较麻烦,可以用ymd代替,然后在第一行或者句尾添加注释说明 a, b, c =1,2, 3 这样的赋值在python中也是可以用的

    • 回答 5

      Python 使用井号#作为单行注释的符号,语法格式为:# 注释内容从井号#开始,直到这行结束为止的所有内容都是注释。Python 解释器遇到#时,会忽略它后面的整行内容。说明多行代码的功能时一般将注释放在代码的上一行多行注释指的是一次性注释程序中多行的内容...

    • 回答 6

      在IDLE中,常用 Alt + 3 给当前行进行注释                           Alt + 4 取消当前行的注释在Pycharm中,常用 Ctrl + / 将所选部分快速注释,再按一次 Ctrl + / 可以将所选部分注释取消...

    没有解决我的问题,去提问