今天看到一个列表去重的方法:
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)
输出结果:
<class 'dict_keys'>
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))
输出结果:
<class 'dict_keys'>
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.
可以用在对于字典顺序有要求的场景.
先学习下.