#字典是一个无序的和数据集合,使用ptint输出字典的时候
#通常输出的顺序话定一的顺序是不一致的

users = ['user1','user2']
passwd = ['123','321']
print(zip(users,passwd))
print(list(zip(users,passwd)))
print(dict(zip(users,passwd)))

s= {}
print(type(s))

#字典的嵌套

student = {
    '20190324':{
        'name':'wq',
        'age':18,
        'score':99
    },
    '20190325':{
        'name':'dd',
        'age':18,
        'score':59
    }
}
print(student['20190324'])
print(student['20190325']['name'])

#所有的key和value值时一样的

print({}.fromkeys({'1','2'},'2019'))

字典的特性

d = {
    '1':'a',
    '2':'b'
}

#字典不支持索引
print(d[‘1’])

#字典不支持切片
print(d[:])

#字典的重复和连接无意义,因为字典的key值是唯一的

#成员操作符

print('1' in d)
print('1' not in d)

#for循环,默认遍历字典的key值

for key in d:
    print(key)

#遍历字典

for key in d:
    print(key,d[key])

for key,value in d.items():
    print(key,value)

字典的增加

service = {
    'http':80,
    'ftp':21,
    'ssh':22
}

#增加一个元素

#如果key值存在,则更新对应的value值
#如果key值不存在,则添加对应的key-value值
service['mysql'] = 3306
print(service)
service['http'] = 443
print(service)

#添加多个key-value值

service_backup = {
    'https':443,
    'tomcat':8080,
    'http':8080
}

service.update(service_backup)
print(service)

service.update(flask=9000,http=8000)
print(service)

#setdefault添加key值

#如果key值存在,不做修改
#如果key值不存在,则添加对应的key-value
service.setdefault('http',9090)
print(service)
service.setdefault('oracle',44575)
print(service)

字典的删除

service = {
    'http':80,
    'ftp':21,
    'ssh':22
}

del service['http']
print(service)

pop删除指定key的key-value

#如果key存在,删除,并且返回删除key对应的value
#如果key不存在,报错
item = service.pop('http')
print(item)
print(service)

popitem删除最后一个key-value值

item = service.popitem()
print('删除的key-value对是:',item)
print(service)

#清空字典内容

service.clear()
print(service)

字典的查看

service = {
    'http':80,
    'ftp':21,
    'ssh':22
}

#查看字典的key值

print(service.keys())

#查看字典的value值

print(service.values())

#查看字典的key-value值

print(service.items())

#查看key的value值;key不存在,报错

print(service['https'])

#查看key的value值

#key不存在,默认返回None
#key不存在,有default,则返回default
print(service.get('https',443))
print(service.get('https'))

#遍历

for k,v in service.items():
    print(k,'--->',v)
#print(service['https'])
if 'https' in service:
    print(service['https'])
else:
    print('key not exist')

#get方法获取指定key对应的value值
#如果key值存在,返回对应的value值
#如果key值不存在,默认返回None,如果需要指定返回值,传值即可
print(service.get(‘https’,‘ket not exist’))

练习:
重复的单词:此处认为单词之间以空格为分隔符,并且不包含标点符号
1.用户输入一句英文
2.打印每个单词其其重复的次数
”hello java hello python“
hello 2
java 1
python 1

“”"
方法一:

sentence = input('请输入句子:')
s = sentence.split(' ')      #将输入的字符串以空格为分隔符转换为列表
table = []                   #定义一个空列表
dict = {}                    #定义一个空字典

for i in s :                 #对列表中的每一个元素进行循环
    num = sentence.count(i)  #统计每一个元素的重复次数
    dict.setdefault(i,num)   #以单词为键,重复次数为值不重复添加到字典中

for j in dict:           #遍历字典
    num1=dict[j]         #将元素对应的重复次数保存为变量
    print('%s %s' %(j,num1))  #打印元素及重复次数

方法二:

s = input('S:')
s_li = s.split()

word_dict = {}
for item in s_li:
    if item not in word_dict:
        word_dict[item] = 1
    else:
        word_dict[item] += 1
print(word_dict)

“”"
2.随机生成1000个数
数字范围[20,100]
升序输出所有不同符数字及其每个数字的重复个数
“”"

import random
a={}
b=[]
for i in range(10):
    b.append(random.randint(20,100))
sorted_num = sorted(b)
for num in b:
    if num in a:
        a[num] += 1
    else:
        a[num] = 1
print(a)

练习:
1.随机生成100个卡号;
卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100>),
2.生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";

s = []
for i in range(100):
    s1 = '6102009%.3d' %(i+1)
    s.append(s1)
s2 = {}.fromkeys(s,'redhat')
print('银行卡号\t\t密码')
for k,v in s2.items():
    print('%s\t%s' %(k,v))