零基础入门python3.7 ——基础知识总结(六)字典(dict)

一。 字典

是一种无序的。可变的序列。他的元素以键值对的形式存在。字典中习惯将各元素的索引叫做键。键所对应的元素叫做值。 将键及其值称之为键值对

  • 字典的特征
通过键而不是索引读取值 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
字典是任意数据类型的无序集合 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。
字典是可变的,并且可以任意嵌套 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。
字典中的键必须唯一 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对
字典中的键必须不可变 字典中的值是不可变的,只能使用数字、字符串或者元组,不能使用列表。

二。创建字典

     1。 使用{}创建字典。键与值之间必须要用":"隔开。 键值对之间必须要用逗号“,”隔开。

a = {
    "name": "小张",
    "age": 24,
    "tall": 178
}

b = {
    (1, 2): 24,
    20: 20,
    "list": [1, 2, 3]
}

print(a)
print("--------")
print(b)


{'name': '小张', 'age': 24, 'tall': 178}
--------
{(1, 2): 24, 20: 20, 'list': [1, 2, 3]}

   2。使用fromkeys(()方法创建带有默认值的字典,该方法必须要有创建键的参数。否则会报错

a = dict.fromkeys(["语文", '数学', '英语'],  80)
print(a)
print("----------")

b = dict.fromkeys(["语文", '数学', '英语'])
print(b)
print("-----------")

c = dict.fromkeys()
print(c)

{'语文': 80, '数学': 80, '英语': 80}
----------
{'语文': None, '数学': None, '英语': None}
-----------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    c = dict.fromkeys()
TypeError: fromkeys expected at least 1 arguments, got 0

  3。dict() 映射函数创建字典

a = dict([['q', 1], [2, 3]])
print(a)
print('--------')

b = dict([('q', 1), (2, 3)])
print(b)
print('---------')

c = dict((['q', 1], [2, 3]))
print(c)
print('----------')

d = dict((('q', 1), (2, 3)))
print(d)


{'q': 1, 2: 3}
--------
{'q': 1, 2: 3}
---------
{'q': 1, 2: 3}
----------
{'q': 1, 2: 3}

三。字典的访问

和列表,元组不同的是字典是通过键访问元素的而不是通过下标访问的。 因为字典的是无序的。

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a[1])
print("------")

print(a['a'])
print('-------')

print(a[1000])


1
------
3
-------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 13, in <module>
    print(a[1000])
KeyError: 1000

python还提供了get方法访问元素,与上述不同的是该方法在访问不到元素时不会报错而是返回None

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a.get(1))
print('-------')

print(a.get('a'))
print('--------')

print(a.get(10))


1
-------
3
--------
None

四。字典的删除

和列表。元组一样字典也可以使用del关键字删除。 因为有垃圾回收机制的存在一般不会手动去删除

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a)
del a
print(a)


{1: 1, 'a': 3, 'b': 5}
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    print(a)
NameError: name 'a' is not defined

五。字典添加键值对

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

a["语文"] = 1000
a[12] = "添加了数字"

print(a)


{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'a': 3, 'b': 5, '语文': 1000, 12: '添加了数字'}

六。字典的修改

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

a[1] = 1000
a['a'] = 'java'
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1000, 'a': 'java', 'b': 5}

七 字典删除键值对

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

del a['a']
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'b': 5}

八。判断字典中是否存在元素

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print('a' in a)
print('-------')
print("a" not in a)
print('-------')
print('100' in a)
print('-------')
print('100' not in a)


{1: 1, 'a': 3, 'b': 5}
--------
True
-------
False
-------
False
-------
True

九。keys()、values() 和 items() 方法

  • keys() 方法用于返回字典中的所有键(key);
  • values() 方法用于返回字典中所有键对应的值(value);
  • items() 用于返回字典中所有的键值对(key-value)
a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print(a.keys())
print('-------')

print(a.values())
print('-------')

print(a.items())


{1: 1, 'a': 3, 'b': 5}
--------
dict_keys([1, 'a', 'b'])
-------
dict_values([1, 3, 5])
-------
dict_items([(1, 1), ('a', 3), ('b', 5)])

为什么会出现上述结果。 原因是在python3中不希望用户直接操作返回值。 一般有以下两种方法可以使我们使用返回值

1  list() 函数

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print(list(a.keys()))
print('-------')

print(list(a.values()))
print('-------')

print(list(a.items()))


{1: 1, 'a': 3, 'b': 5}
--------
[1, 'a', 'b']
-------
[1, 3, 5]
-------
[(1, 1), ('a', 3), ('b', 5)]

2。for-in遍历

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

for key in a.keys():
    print(key)
print('-------')

for value in a.values():
    print(value)
print('-------')

for k, v in a.items():
    print(k, v)


{1: 1, 'a': 3, 'b': 5}
--------
1
a
b
-------
1
3
5
-------
1 1
a 3
b 5

十。copy() 方法  拷贝字典

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

b = a.copy()
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'a': 3, 'b': 5}

注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

# 向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。
b = a.copy()
a[1000] = 10000
print(b)
print(a)
print("----------")

# 由于 b 和 a 共享[1,2,3](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。
a["b"].remove(1)
print(a)
print(b)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'a': 3, 'b': [1, 2]}
{1: 1, 'a': 3, 'b': [1, 2], 1000: 10000}
----------
{1: 1, 'a': 3, 'b': [2], 1000: 10000}
{1: 1, 'a': 3, 'b': [2]}

十一。update() 方法

使用一个字典所包含的键值对来更新己有的字典,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.update({1: 1000, 2000: 30000})
print(a)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1000, 'a': 3, 'b': [1, 2], 2000: 30000}

十二。pop() 和 popitem() 方法

pop() 和 popitem() 都用来删除字典中的键值对,不同的是,pop() 用来删除指定的键值对,而 popitem() 用来随机删除一个键值对,

 = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.pop("a")
print(a)

a.popitem()
print(a)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'b': [1, 2]}
{1: 1}

说明 popitem() 随机删除字典中的一个键值对是不准确的,虽然字典是一种无须的列表,但键值对在底层也是有存储顺序的,popitem() 总是弹出底层中的最后一个 key-value,这和列表的 pop() 方法类似。

十三 setdefault() 方法

返回某个 key 对应的 value,

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.setdefault(1000)
print(a)

a.setdefault("语文", 1000)
print(a)

a.setdefault(1, 20000)
print(a)



{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'a': 3, 'b': [1, 2], 1000: None}
{1: 1, 'a': 3, 'b': [1, 2], 1000: None, '语文': 1000}
{1: 1, 'a': 3, 'b': [1, 2], 1000: None, '语文': 1000}
  • 如果该 key 存在,那么直接返回该 key 对应的 value;
  • 如果该 key 不存在,那么先为该 key 设置默认的 defaultvalue,然后再返回该 key 对应的 defaultvalue。
发布了26 篇原创文章 · 获赞 79 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_25502269/article/details/105521734