您的位置:

python字典遍历和搜索(python字典如何遍历)

本文目录一览:

python怎样遍历.py的内容?

列表的遍历

方法一:通过for循环

li = [i for i in range(10)]

for i in li:

print(i)

方法二:通过while循环

# 虽然for循环已经很好用了,但是在有些情况下,使用while循环可以更灵活

# 只需要将判断条件设置为小于列表长度,即可完成列表通过while循环的遍历

li = [i for i in range(10)]

i = 0

while i len(li):

print(li[i])

i += 1

方法三:配合enumerate使用,同时获取列表的索引

li = [i + 1 for i in range(10)]

# 此时,i为一个元组,元组的第一个元素为索引,第二个元素为原列表的元素

# 因此,在遍历列表的同时,需要同时获取坐标的情况下,可以配合enumerate()一起使用

for i in enumerate(li):

print(i)

字典的遍历

字典的遍历和列表有一些不同,因为字典有键和值两个关键部分。默认的遍历情况,是遍历字典的键,当然,可以通过字典的键取得值,也可以直接遍历值,或者直接遍历键和值。

方法一:直接使用for循环

直接使用for循环对一个字典进行遍历,默认取得的是字典的键

dt = {i: i + 1 for i in range(10)}

for i in dt:

print("字典的键:", i) # 字典的键

print("字典的值:", dt[i]) # 字典的值

方法二:遍历dict.keys()

这种方法与方法一的效果其实是一样的,同样是获取字典的键

dt = {i: i + 1 for i in range(10)}

for i in dt.keys():

print("字典的键:", i) # 字典的键

print("字典的值:", dt[i]) # 字典的值

方法三:遍历dict.values()

这种方法与方法一和二很不相同,因为它只获取了字典的值

dt = {i: i + 1 for i in range(10)}

# 这是很特殊的方法,因为它没有获取字典的键

for i in dt.values():

print("字典的值:", i) # 此时i不再是字典的键,而是值

方法四:遍历dict.items()

这种方法一般来说要更好,因为它同时获取到了字典的键和值,而且性能上要高于先获取键,再通过键获取对应的值

dt = {i: i + 1 for i in range(10)}

for i in dt.items():

print("字典的键值对:", i)

print("字典的键:", i[0])

print("字典的值:", i[1])

总结

1,列表的遍历比较简单,除了配合enumerate()使用,可以同步获取索引以外,并没有特别值得纠结的。

2,字典的遍历方法比较多,其中第四种是能适用于一切情况的,前两种也可以适用于一切情况,但是如果你同时需要获取键和值,性能不如第四种要好。第三种比较特别,除非你真的只需要字典的值,否则它在多数情况下是不能够满足需求的。

Python字典的底层实现

字典是一种可变、无序容器数据结构。元素以键值对存在,键值唯一。它的特点搜索速度很快:数据量增加10000倍,搜索时间增加不到2倍;当数据量很大的时候,字典的搜索速度要比列表快成百上千倍。

在Python中,字典是通过散列表(哈希表)实现的。字典也叫哈希数组或关联数组,所以其本质是数组(如下图),每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用。所有 bucket 结构和大小一致,我们可以通过偏移量来读取指定 bucket。

定义一个字典 dic = {},假设其哈希数组长度为8。

Python会根据哈希数组的拥挤程度对其扩容。“扩容”指的是:创造更大的数组,这时候会对已经存在的键值对重新进行哈希取余运算保存到其它位置;一般接近 2/3 时,数组就会扩容。扩容后,偏移量的数字个数增加,如数组长度扩容到16时,可以用最右边4位数字作为偏移量。

计算键对象 name 的哈希值,然后比较哈希数组对应索引内的bucket是否为空,为空返回 None ,否则计算这个bucket的键对象的哈希值,然后与 name 哈希值比较,相等则返回 值对象 ,否则继续左移计算哈希值。

注意:

1.键必须为可哈希的,如数字、元组、字符串;自定义对象需要满足支持hash、支持通过 __eq__() 方法检测相等性、若 a == b 为真,则 hash(a) == hash(b) 也为真。

2.字典的内存开销很大,以空间换时间。

3.键查询速度很快,列表查询是按顺序一个个遍历,字典则是一步到位。

4.往字典里面添加新键可能导致扩容,导致哈希数组中键的次序变化。因此,不要在遍历字典的同时进行字典的修改。

软件测试中,python字典遍历的几种方法?

1 遍历key值my_dict = for key in my_dict: print("键是",key)2 遍历value值my_dict = for value in my_dict.values(): print("值是",value)3 遍历键值对 for kv in a.items(): # kv 是元组形式 print(kv) 在控制台输出的结果是# (a, 1)#(b, 2)#(c, 3)如果想了解更多