【python】collections + dict

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

### Python 中 `collections` 库中 `dict.update()` 方法详解 在Python编程语言里,字典(dict)是一种非常灵活的数据结构,可以存储键值对。对于来自`collections`库的特定类型的字典,如`defaultdict`或`Counter`,同样支持标准字典操作方法之一——`.update()`。 此方法用于更新调用它的字典对象的内容,可以通过传入另一个字典或者可迭代的对象来实现[^1]。当参数为字典时,会将该字典中的所有项加入到原字典;如果存在相同的键,则覆盖原有值。如果是通过传递关键字参数的方式调用,则这些参数会被视为要添加的新条目: ```python from collections import defaultdict d = defaultdict(int) # 使用其他字典更新当前字典 other_dict = {'apple': 4, 'banana': 6} d.update(other_dict) print(d) # 输出: defaultdict(<class 'int'>, {'apple': 4, 'banana': 6}) # 或者使用键值对列表更新 pairs = [('orange', 8), ('grape', 9)] d.update(pairs) print(d) # 输出: defaultdict(<class 'int'>, {'apple': 4, 'banana': 6, 'orange': 8, 'grape': 9}) ``` 值得注意的是,在某些情况下也可以直接给定一系列键作为位置参数,并为其分配相同的一个默认值(仅适用于接受此类输入的方法变体)。然而,更常见的情况还是利用已有的映射关系或者是键值对序列来进行批量修改或扩展现有的字典实例[^3]。 此外,还可以采用如下方式使用关键词参数的形式向字典中增加新的元素: ```python d.update(pear=7, melon=5) print(d) # 输出: defaultdict(<class 'int'>, {..., 'pear': 7, 'melon': 5}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值