Python学习笔记(三)——字典、集合

集合

1、集合:一个无序、无索引、不重复的集合(集合数据)。用花括号‘{}’来表示,并用逗号来分隔其中的元素。
1.1 遍历
注意:集合是无序的,因此无法确定项目的显示顺序。无索引也就意味着不能通过索引访问集合set中的元素。
可以使用 for 循环遍历集合,或者使用 in 关键字查询集合中是否存在指定值。

1.2 元素
集合一旦创建,就无法更改其中的元素,但是可以添加、删除新元素。
1.2.1 添加元素
add() 方法:要将一个元素添加到集合
update() 方法:要向集合中添加多个元素,且参数可以是列表,元组,字典等

thisset = {"apple", "banana", "cherry"}
#thisset.add("orange")
#输出:{'banana', 'orange', 'apple', 'cherry'}
thisset.update(["orange", "mango", "grapes"])
print(thisset)
输出:{'banana', 'grapes', 'apple', 'cherry', 'mango', 'orange'}

len() 方法同样可以确定集合中有多少元素(集合长度)

1.3.1删除元素
remove() 、 discard() 、pop() 方法

thisset = {"apple", "banana", "cherry"}
thisset.discard("apple")  #或者thisset.remove("apple")
print(thisset)
输出:{'cherry', 'banana'}

如果要删除的项目不存在,则 remove() 将引发错误。在python3.0+,discard()方法在元素不存在时,不会发生错误。

thisset = {"apple", "banana", "cherry","ear"}
thisset.pop()
print(thisset)
输出:
{'banana', 'cherry', 'apple'} #第一次运行
{'banana', 'cherry', 'pear'}  #第二次运行
{'pear', 'banana', 'apple'}   #第三次运行

多次执行测试结果都不一样。pop() 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。(字典和字符串的集合是随机删除元素,其余的是删除左面第一个元素)
set() 函数:创建集合。创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

字典

2、字典:一个无序、可变和有索引的集合,字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。是一种可变容器模型,且可存储任意类型对象。

dict = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串、数字、元组、字典,用列表不行。
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
dict = {‘Iam’: ‘2341’, ‘You’: ‘SB’, ‘112’: 822, 22: ‘Love’}

2.1、访问字典中的值
依次指定字典名和放在方括号内的键:

dict = {'Iam': '2341',  'You': 'SB',  '112': 822, 22: 'Love'}
print (dict[22])
print (dict['112'])
输出:
Love
822

len()方法:确定字典有多少个键值对。
如果用字典里没有的键访问数据,则会输出错误。

2.2、修改字典

dict = {'Iam': '2341',
        'You': 'SB',
        '112': 822,
        22: 'Love'}
dict['Iam'] = 'CC'  #修改
dict['school'] = 'SW'  #添加新的键并为其赋值
print (dict)
输出:
{'Iam': 'CC', 'You': 'SB', '112': 822, 22: 'Love', 'school': 'SW'}

删除:del 语句能删除单一的元素,也能删除整个字典。整个字典删除后不能再使用。

dict.pop('112')  #删除单一键值对
del dict['You']  #删除单一键值对
dict.clear()     #清空字典
del dict         #删除整个字典

复制:不能通过键入 dict2 = dict1 来复制字典,因为:dict2 只是对 dict1 的引用,而 dict1 中的更改也将自动在 dict2 中进行。而列表、元组、集合可以。使用copy() 方法可复制字典。
dict()函数:创建一个新的字典,dict2 = dict(dict1):创建了与dict1相同的字典dict2

2.3、遍历字典
items() 方法:以列表返回可遍历的(键, 值) 元组数组
keys()方法:返回一个可迭代对象,可以使用 list() 转换为列表,列表为字典中所有键
value()方法:返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值

dict0 = {'Iam': '2341',
        'You': 'SB',
        '112': 822,
        22: 'Love'}
for key, value in dict0.items():        
    print (str(key) + ': '+str(value))  #字典中有字符串和数字,为了能一起显示,用了str()
print("\n")    
for key in dict0.keys():
    print(key)
print("\n")
for value in dict0.values():
    print(value)
输出:
Iam: 2341
You: SB
112: 822
22: Love

Iam
You
112
22

2341
SB
822
Love

2.4、嵌套
2.4.1 字典列表
将字典都放到列表中:

a0 = {'color': 'green', 'points': 5}
a1 = {'color': 'yellow', 'points': 10}
a2 = {'color': 'red', 'points': 15}
a3 = [a0, a1, a2]
for a in a3:
 print(a) 
输出:
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

2.4.2 在字典中存储列表
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。

 favorite_languages = {
 'jen': ['python', 'ruby'],
 'sarah': ['c'],
 'edward': ['ruby', 'go'],
 'phil': ['python', 'haskell'],
 }
 for name, languages in favorite_languages.items():
    for language in languages: 

类似构建了一个多维的数组,遍历时需要用到嵌套循环。

2.4.3 嵌套字典
可在字典中嵌套字典,但这样做时,代码可能会复杂起来。

myfamily = {
  "child1" : {
    "last" : "Adbs",
    "first": "A",
    "year" : 2000
  },
  "child2" : {
    "last" : "Jswet",
    "first": "J",
    "year" : 1998
  },
  "child3" : {
    "last" : "Rsdhf",
    "first": "R",
    "year" : 1999
  }
}
for num, child_info in myfamily.items():
    print ("\nnumber: " + num)
    full_name = child_info["first"] + " " + child_info["last"]
    years = child_info["year"]

    print ("name: " + full_name.title())
    print ("year: " + str(years))

输出:
 
number: child1
name: A Adbs
year: 2000

number: child2
name: J Jswet
year: 1998

number: child3
name: R Rsdhf
year: 1999

如果表示每位孩子的字典的结构都相同,这会使得嵌套的字典处理起来更容易。

你可能感兴趣的:(#,Python基础,python)