字典的魔法

Posted windows-phone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典的魔法相关的知识,希望对你有一定的参考价值。

# 字典 dict类 ,一个kv称为一个键值对,value可以是任意类型,可以多层嵌套.
info = {"k1": "v1", "k2":"v2"}
info = {
    "k1":10,
    "k2":True,
    "k3":[
        11,
        22,
        33,
        {
            "kk1":"vv1",
            "kk2":"vv2"
        }
    ],
    "k4":(11, 22, 33, 44)
}
print(info)


# key的值
# list不可以,tuple可以,为什么?
# list允许被修改,tuple不允许被修改
# dict是按照hash表进行保存的,所有的key都会转换成一个hash值,放入一个表中,value原样存放,列表是不支持转换成hash值的.
# 字典可以作为字典的key吗?不可以.
info = {
    1: "one",
    2: "two",
    # True:"true", true直接被忽略
    #[11]:"v"不允许
    (11, 22):"v"
    #{"k1":"v1"}:"v1"
}
print(info) # {1: ‘one‘, 2: ‘two‘, (11, 22): ‘v‘}


# 字典是有序的吗?每次运行,显示的结果都不一样.因此,字典无序
info = {
    "k1":10,
    "k2":True,
    "k3":[
        11,
        22,
        33,
        {
            "kk1":"vv1",
            "kk2":(11,22)
        }
    ],
    "k4":(11, 22, 33, 44),
    2:"two"
}
print(info)


# 获取值, 只能通过索引,不能通过切片,因为dict是无序的
print(info["k1"]) # 10
print(info[2])
print(info["k3"][3]["kk2"][0]) # 11


# 删除kv
del info["k1"]
print(info)
del info["k3"][3]["kk1"]
print(info)

# 循环 for,while不可以
for item in info:
    print(item) #只输出key
for item in info.keys():
    print(item) # 和上面的结果一样
for item in info.values():
    print(item) # 只输出vlaues
for key in info.keys():
    print(key, info[key]) # 同时输出key和vlaue
for k,v in info.items():
    print(k, v) # 同时输出key和vlaue

dict的魔法

# clear
# copy 浅拷贝
# fromkeys @staticmethod静态方法, 支持类名直接调用该方法
v = dict.fromkeys(["k1", 123], 123) # 传入可迭代对象.根据序列,创建字典,指定统一的值
print(v) # {123: 123, ‘k1‘: 123}

# get 根据key获取值,可以不存在时返回None,还可以指定默认值.
dic = {"k1": "v1","k3":"v3"}
print(dic.get("k1"))
print(dic.get("k2")) # None
print(dic.get("k2", 1111)) # 1111

# items
# keys
# values

# pop 删除指定key并返回value的值
dic = {"k1": "v1","k3":"v3"}
v = dic.pop("k1")
print(dic) # {‘k3‘: ‘v3‘}
print(v) # v1
v = dic.pop("k2", 90000) # 90000为key不存在的时候默认返回的值.s
dic = {"k1": "v1","k3":"v3"}
k, v = dic.popitem() # 随机删
print(dic, k, v) # {‘k1‘: ‘v1‘} k3 v3

# setdefault 设置值
# 但若存在,不设置只获取当前key对应的值
# 若不存在,添加kv
dic = {"k1": "v1","k3":"v3"}
v = dic.setdefault("k1", "123")
print(dic, v) # {‘k1‘: ‘v1‘, ‘k3‘: ‘v3‘} v1
v = dic.setdefault("k4", "v4")
print(dic, v) # {‘k3‘: ‘v3‘, ‘k1‘: ‘v1‘, ‘k4‘: ‘v4‘} v4

# update
dic = {"k1": "v1","k3":"v3"}
dic.update({"k1":"111", "k3": 123})
print(dic, v) # {‘k1‘: ‘111‘, ‘k3‘: 123}
dic.update(k1=123, k3=356, k4=1234) # python内部做转换,转换成dict
print(dic) # {‘k4‘: 1234, ‘k1‘: 123, ‘k3‘: 356}

# keysvaluesitemsgetupdate

 

以上是关于字典的魔法的主要内容,如果未能解决你的问题,请参考以下文章

「 每日一练,快乐水题 」676. 实现一个魔法字典

LeetCode 676 实现一个魔法字典[枚举] HERODING的LeetCode之路

每日一题676. 实现一个魔法字典

字典的魔法

字典的基本魔法

LeetCode 0676.实现一个魔法字典 - 易实现但效率不是那么高的方法