字典类似于java中的map,元素都是键值对
# 列表,字典不能当做字典的key值
dt = {
    1:46453,
    True:123,
    "dsf":545,
    #[12,45]:77
    #{"ab":12}:45
    (12,34):45
}
print(dt)

dt = {
    "key1": "abc",  # 一个键值对(key:value)是一个元素
    # 键值对的value可以是任何值
    "key2": [
        "ddd",
        (88,99),
        {
            "key1": "vvv",
            "key2": "yyy",
            "key3": (1236,456)
        }
    ],
    "key3": (999, "ccc")
}
# 字典中的元素是无序的
# 因为无序,只能通过key获取value
v = dt["key2"][2]["key3"][1]
print(v)

del dt["key2"][2]["key1"]
print(dt)

#删除字典key值
del dt["key2"]
print(dt)

# 同字典的keys() 方法一样
for item in dt:
    print(item)

# 遍历key值
for item in dt.keys():
    print(item)

# 遍历value值
for item in dt.values():
    print(item)

# 遍历键值对
for k,v in dt.items():
    print(k,v)
# 清空字典
dt.clear()

# 根据序列创建字典
# 第一个参数(可遍历参数)中的每个元素都被当成一个key
# 第二个参数是每个key的value
dt = dict.fromkeys("abcde",123)
# {'a': 123, 'b': 123, 'c': 123, 'd': 123}
print(dt)

# 直接通过 dt[key]方式,如果key值在字典中不存在,就会报错
# 通过get方法,如果没有key,则返回None,还可以指定返回值代替None
vv = dt.get("aa",110)
print(vv)

# 根据key值移除键值对,当参数对应的key值不存在,第二个参数可以指定返回的值
v = dt.pop("aa",0)
print(v)

# popitem()删除,但目前我不知道是不是随机删除,返回值返回一个键值对
v = dt.popitem()
print(v)

# 设置value
# 如果字典中存在key,不会覆盖,并且返回key对应的value
# 不存在key,设置,并且返回第二个参数(默认None)
v = dt.setdefault("aa")
print(dt, v)

# 更新 -- 参数是一个字典
dt.update({"a":456,"b":890,"bb":110})
print(dt)
# 更新 -- python会将这种参数转换成字典,然后进行更新
dt.update(a=789,b=120)
print(dt)
enumerate遍历可迭代对象
tu = ('123','456','789','10')
for idx, elem in enumerate(tu, 100):
    print(idx, elem)

lt = [123, 456, 89, 10,"abc"]
for idx, elem in enumerate(lt, 100):
    print(idx, elem)

s = "xiatian"
for idx, elem in enumerate(s, 100):
    print(idx, elem)