python字典缺失值的处理,五种方式:defaultdict,dict.get,Counter,__missing__

  在Python中字典是使用得非常频繁的一个数据结构,但是很多从其他语言转学python的朋友或是Python的初学者在使用字典的时候还是以原来语言的思维,没有体现出python语言的特性,下面我总结了一些常用场景可以让你的代码更加的"pythonnic"。

在代码中,我们经常会使用dict来计数,如下代码:

写法一:not in

arr = [1,3,2,3,2,1,2,3,2,1,2]
count = {}
for i in arr:
    if i not in count:
        count[i] = 1
    else:
        count[i]+=1
print(count)#{1: 3, 3: 3, 2: 5}

因为直接调用不存在的键会导致KeyError,所以我们需要先判断其键值是否存在,但其实有更好的办法,就是使用defaultdict:

写法二:defaultdict

from collections import defaultdict
arr = [1,3,2,3,2,1,2,3,2,1,2]
count = defaultdict(int)
for i in arr:
    count[i]+=1
print(count)#{1: 3, 3: 3, 2: 5})

也可以调用get方法

方法三:get

arr = [1,3,2,3,2,1,2,3,2,1,2]
count = {}
for i in arr:
    num = count.get(i,0)
    count[i]= num+1
print(count)#{1: 3, 3: 3, 2: 5}

不过,如果是计数的话,其实有一个专门的类用于计数

方法四:Counter

from collections import Counter
arr = [1,3,2,3,2,1,2,3,2,1,2]
count = Counter(arr)
print(count)#{2: 5, 1: 3, 3: 3}

其中方法二 defaultdict(type)参数不但可以是int,还可以是其他类型,例如set,这也是经常用到的,例如下面的程序,以第一个字母分类:

from collections import defaultdict

words = ['apple','dog','cat','person','hat','armour','ball']
data = defaultdict(set)

for word in words:
    data[word[0]].add(word)

print(data)# {'a': {'apple', 'armour'}, 'd': {'dog'}, 'c': {'cat'}, 'p': {'person'}, 'h': {'hat'}, 'b': {'ball'}}

  好了,目前的这几种方法应该可以解决大多数缺失值的问题, 但是如果当有缺失值的时候,需要进行一些复杂的工作呢,例如key保存的是数据集的名称,而value保存数据集的数据,当然我们可以在缺失的时候进行数据读取,但是有一个更好的方法是重写__missing__方法来进行缺失时的操作。

 方法五:__missing__

class DataSet(dict):
    def loadData(self,file):
        pass
    def __missing__(self, key):
        value = self.loadData(key)
        self[key] = value
        return value

可能上面的例子比较抽象,下面用__missing__方法解决字母分类问题:

class DictTest(dict):
    def __missing__(self, key):
        value = set()
        self[key] = value
        return value
words = ['apple','dog','cat','person','hat','armour','ball']
dc = DictTest()
for word in words:
    dc[word[0]].add(word)
print(dc)#{'armour', 'apple'}, 'd': {'dog'}, 'c': {'cat'}, 'p': {'person'}, 'h': {'hat'}, 'b': {'ball'}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码中的entity_dict_in_file是一个defaultdict对象,用于存储实体的信息。defaultdictPython中的一个字典子类,它的特点是在查询一个不存在的键时不会报错,而是会返回一个默认值。在这里,entity_dict_in_file使用了两层嵌套的defaultdict,第一层的键是字符串类型,第二层的键也是字符串类型,值是一个列表。 lambda: defaultdict(list) 是一个匿名函数,它返回一个defaultdict(list)对象作为默认值。这意味着当我们查询一个不存在的键时,会返回一个空的列表作为默认值。所以entity_dict_in_file的结构可以理解为,第一层的键是字符串类型的实体名,第二层的键是字符串类型的文件名,值是一个列表,用来存储该实体在该文件中的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [GPT3:语言模型在命名实体识别中的应用(GPT3:Applicationof GPT 3 in Named Entity Recognition](https://blog.csdn.net/universsky2015/article/details/131929008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [biaffine model:Named Entity Recognition as Dependency Parsing](https://blog.csdn.net/mynameisgt/article/details/128018214)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值