Python数据类型 — 字典

系统 1569 0

字典是 python 中唯一的映射类型,采用 键值对( key-value )的形式存储数据。 python key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以字典是无序存储的,且 key 必须是可哈希的。 可哈希表示 key 必须是不可变类型,如:数字、字符串、元组。

特性:无顺序、去重、查询速度快,比列表快多了、比list占用内存多

字典 = { key: value }

创建

            
              1,	使用”{}”创建:
dd = {'a': 'aaa', 'b': 'bbb'}
2,使用dict创建:
li = [('aa', 'aaa'),('bb', 'bbb')]
dd = dict(li)
print(dd)  # 输出{'aa': 'aaa', 'bb': 'bbb'}

dd = dict(aa='aaa', bb='bbb')
print(dd)  # {'aa': 'aaa', 'bb': 'bbb'}
            
          

            
              info["stu04"] = "Dd"  # 直接增加;
print(info)

update用于合并两个字典:字典1.update(字典2)
            
          

            
              del info["stu01"]  # info.pop("stu01")
info.popitem()  # 随机删除

字典名.pop(‘键’)

字典名.clear()  # 清楚所有元素;
            
          

            
              dic = {"name":"jin","age":18,"sex":"male"}
dic2 = {"name":"alex","weight":75}
dic2.update(dic)  # 将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic2中
print(dic2)

dict1["stu04"]="马六"    #类似增加,如果key值存在,则就修改
            
          

查询、获取

            
              print(info.get("stu07"))  # 有该键则返回,无该键则返回None。
print('stu02' in info)  # 判断是否在该字典中;

dd = {'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}
print(dd)
print('aa' in dd)  # 判断键是否在字典中,这里放回False;

print(dd.keys())  # 获取所有键,用一个列表包装;
print(dd.values())  # 获取所有值,用一个列表包装;

all_items = dd.items()  # 获取字典的所有键值对,键值对用元组包装,多个键值对存放于列表中;
print(all_items)  //输出dict_items([('a', 'aaa'), ('b', 'bbb'), ('c', 'ccc')])

print(('a', 'aaa') in all_items)  # 判断是否包含键值对,这里返回True;
print(list(all_items))  # 将键值对转换成列表


for i in all_items:  # 本质上是在遍历列表;
    print(i)

print(list(dict1))   #这种只能看到key
            
          

多级字典

            
              travel_catlog = {
    "east_China": {
        "hangzhou":["西湖旅游胜地", "5A"],
        "shanghai":["梦的创造地","5A"],
    },
    "west_China": {
        "dali":["温文尔雅","3A"],
        "chengdu":["天府之国","4A"]
    },
    "north_China": {
        "beijing":["中国之最","5A"],
        "tianjin":["想象之地","5A"]
    },
    "sourth_China":{
        "hainan":["热带雨林水果之地","4A"],
        "shenzheng":["科技之源","5A"]
    },
}
print(travel_catlog["sourth_China"]["hainan"])  # 输出该键的值:['热带雨林水果之地', '4A']

print(travel_catlog.values())  # 输出第一层字典的所有值
print(travel_catlog.keys())  # 输出第一层字典的所有键

print(travel_catlog.setdefault("sourth_China","hahahahah"))  # 以键去字典里去找,如果找到则返回其键和值;如果没有找到键,则按照代码在该字典去创建一个记录;
                                # 在字典中找到了,则显示为:{'hainan': ['热带雨林水果之地', '4A'], 'shenzheng': ['科技之源', '5A']}
travel_catlog.setdefault("China","hahahahah")
                                # 在字典中没有找到,则将其为字典添加为一个新的记录;
print(travel_catlog)
            
          
            
              # 判断是否是字典的实例对象
d = {'a':'aaa','b':'bbb','c':'cccc'}
print(isinstance(d,dict))  # 输出True
            
          

字典合并

            
              a = {
    's01':'Aa',
    's02':'Bb',
    's03':'Cc',
}
b = {
    's02':'Bbbbb',
    's04':'Dd',
}
a.update(b)  # 把b合并于a,如果有重复的,把参数里的记录覆盖掉原来的;
print(a)
            
          
            
              格式化生成字典
c = dict.fromkeys([1,2,3],['testd','hha','nihao'])  # 格式化一个字典;参数:key,value,
    # 每个key对应的value都是一样的,因为对于每个key都是被value赋值
print(c)
            
          

字典循环、迭代

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

for key,value in a.items():  # 先把dict转成list;数据较大时莫用
    print(key,value)

#只循环key
for i in dict1.keys():
    print(i)

#只循环value
for i in dict1.values():
    print(i)
            
          

字典生成式

语法: { 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

            
              # 【例 1】
listdemo = ['C语言中文网','c.biancheng.net']
#将列表中各字符串值为键,各字符串的长度为值,组成键值对
newdict = {key:len(key) for key in listdemo}
print(newdict)
# 运行结果为:
# {'C语言中文网': 6, 'c.biancheng.net': 15}


#【例 2】交换现有字典中各键值对的键和值。
olddict={'C语言中文网': 6, 'c.biancheng.net': 15}
newdict = {v: k for k, v in olddict.items()}
print(newdict)
# 运行结果为:
# {6: 'C语言中文网', 15: 'c.biancheng.net'}


#【例 3】使用 if 表达式筛选符合条件的键值对。
olddict={'C语言中文网': 6, 'c.biancheng.net': 15}
newdict = {v: k for k, v in olddict.items() if v>10}
print(newdict)
# 运行结果为:
# {15: 'c.biancheng.net'}

            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论