【Python】Python字典fromkeys,dict_keys转化list方法以及有序字典的进一步了解

文章目录

    • dict_keys转化为list
    • dict.fromkeys()
    • 有序字典
      • 普通字典
      • 有序字典

今天看到一个列表去重的方法:

def clear_repeat(repeat_list):
    new_dict = {}
    return new_dict.fromkeys(repeat_list).keys()

after_deal = clear_repeat([1,2,3,4,3,2,1,5,6,5])
print(type(after_deal))
print(after_deal)

输出结果:


dict_keys([1, 2, 3, 4, 5, 6])

dict_keys转化为list

和转化为set后一样,使用list进行转化就可以了.

def clear_repeat(repeat_list):
    new_dict = {}
    return new_dict.fromkeys(repeat_list).keys()

after_deal = clear_repeat([1,2,3,7,4,3,2,1,5,6,5])
print(type(after_deal))
print(after_deal)
print(list(after_deal))

输出结果:


dict_keys([1, 2, 3, 4, 5, 6, 7])
[1, 2, 3, 4, 5, 6, 7]

这样确实可以做到list去重,但是会改变原来顺序

dict.fromkeys()

help(dict.fromkeys)

Python提供的help信息:

Help on built-in function fromkeys:

fromkeys(iterable, value=None, /) method of builtins.type instance
    Returns a new dict with keys from iterable and values equal to value.

下面代码实例:

a_list =[1,2,3]
a_dict={}
b_dict=a_dict.fromkeys(a_list)
print(b_dict)   # {1: None, 2: None, 3: None}
c_dict=a_dict.fromkeys(a_list,1)
print(c_dict)   # {1: 1, 2: 1, 3: 1}

也就是默认值为None,可以为键添加相同的值.
感觉可以用来初始化字典将所有键均赋同一个值.

有序字典

普通字典

b_dict = {}
b_dict[1]='a'
b_dict[3]='c'
b_dict[2]='b'

c_dict = {}
c_dict[1]='a'
c_dict[2]='b'
c_dict[3]='c'

print(id(b_dict))	# 25186096
print(id(c_dict))	# 25186144
print(b_dict == c_dict)		# True

普通字典并不受到顺序不同的影响,顺序不同但键值相同的字典视为相同字典

有序字典

b_dict = {}
b_dict[1]='a'
b_dict[3]='c'
b_dict[2]='b'

c_dict = {}
c_dict[1]='a'
c_dict[2]='b'
c_dict[3]='c'

print(b_dict == c_dict)
from collections import OrderedDict
d_dict = OrderedDict()
d_dict[1]='a'
d_dict[2]='b'
d_dict[3]='c'
for keys,values in d_dict.items():
    print(keys,values)

e_dict = OrderedDict()
e_dict[1]='a'
e_dict[3]='c'
e_dict[2]='b'

print(d_dict)
print(e_dict)
print(d_dict == e_dict)

输出结果:

1 a
2 b
3 c
OrderedDict([(1, 'a'), (2, 'b'), (3, 'c')])
OrderedDict([(1, 'a'), (3, 'c'), (2, 'b')])
False

最后的False表明,虽然键值对完全相同但是顺序不同的有序字典并不相同.
而且输出的和普通字典也不同,前面会有一个OrderDict.
可以用在对于字典顺序有要求的场景.
先学习下.

你可能感兴趣的:(Python)