collections
https://www.cnblogs.com/herbert/archive/2013/01/09/2852843.html
dict
未初始化,插入keys不存在的情况
dic = {}
lis = [1,2,4,2,4,5,1]
for i in lis:
if(i not in dic.keys()):
dic[i] = 1
else:
dic[i] += 1
print(dic)
或者用下面这种方法
dic = {}
lis = [1,2,4,2,4,5,1]
for i in lis:
dic[i] = dic.get(i,0)+1
print(dic)
批量初始化
Name = ['a','b','c','d']
hour = dict().fromkeys([str(i) for i in range(1,3)],0.00)
Val = dict().fromkeys([i for i in Name],hour)
temp = dict().fromkeys([i for i in Name])
print(hour)
print(Val)
print(temp)
输出:
{‘1’: 0.0, ‘2’: 0.0}
{‘a’: {‘1’: 0.0, ‘2’: 0.0}, ‘b’: {‘1’: 0.0, ‘2’: 0.0}, ‘c’: {‘1’: 0.0, ‘2’: 0.0}, ‘d’: {‘1’: 0.0, ‘2’: 0.0}}
{‘a’: None, ‘b’: None, ‘c’: None, ‘d’: None}
按key排序
有个坑,排序之后就不是dict类型了,而是list了
dic={'a':7,'b':2,'c':3}
dic_sor = dict(sorted(dic.keys(),reverse=True))
print(dic_sor) # 按照 递减 排序 reverse=true
# 只返回键值 ['c', 'b', 'a']
import operator
dic={'a':7,'b':2,'c':3}
dic_sor = dict(sorted(dic.items(),key=operator.itemgetter(0),reverse=False))
print(dic_sor)
# 如果不强转一步,则返回键对值 [('a', 7), ('b', 2), ('c', 3)]
# 转一步,就会还是dict类型
按value排序
# 方法一:需要迭代器
import operator
dic={'a':7,'b':2,'c':3}
print(sorted(dic.items(),key=operator.itemgetter(1),reverse=False))
# 返回的是键对值 [('b', 2), ('c', 3), ('a', 7)]
# 方法二:不需要迭代器
dic={'a':7,'b':2,'c':3}
print(sorted(dic.items(),key = lambda x:x[1],reverse = True))
# 返回的是键对值 [('a', 7), ('c', 3), ('b', 2)]
对list中dict排序
info= [{'ID':11,'name':'lili','age':20},
{'ID':2,'name':'jobs','age':40},
{'ID':22,'name':'aces','age':30},
{'ID':15,'name':'bob','age':18}]
print(sorted(info,key=lambdax:x['ID'])) #sort by ID
'''out:
[{'ID':2, 'name': 'jobs', 'age': 40},
{'ID': 11, 'name': 'lili', 'age': 20},
{'ID':15, 'name': 'bob', 'age': 18},
{'ID': 22, 'name': 'aces', 'age': 30}]'''
多级排序
print(sorted(info,key=lambdax:(x['name'],x['age'])))
print(sorted(info,key=itemgetter("name",'age')))
'''out:
[{'ID': 22, 'name': 'aces', 'age': 30},
{'ID': 15, 'name': 'bob', 'age': 18},
{'ID': 2, 'name': 'jobs', 'age': 40},
{'ID': 11, 'name': 'lili', 'age': 20}]
'''
遍历
d = {'a':1,'b':5,'c':46}
for i in d:
print(i,d[i])
for key,value in d.items():
print(key,value)
输出:
a 1
b 5
c 46
字典一键值对多值
# 保存字符的位置
strs = ['a','a','b','b','c','c','c']
dic = {}
for i in range(len(strs)):
dic.setdefault(strs[i],[]).append(i) # 将字典后的设置成一个list
d = [[]]
for key in dic.keys():
d.append(list(dic[key])) # 按照字典的键值创建新的list
print(d[1:])
# [[0, 1], [2, 3], [4, 5, 6]]
for i in range(len(d)):
for j in range(len(d[i])):
print(d[i][j])
输出:
0
1
2
3
4
5
6
Count
d = {}
cur = 1
i = 0
d[(cur, i)] = 1
i += 1
d[(cur, i)] = 2
i += 1
d[(cur, i)] = 3
print(d.get((cur, i), int(cur == 1)))
结果输出3