# -*- coding: utf-8 -*-
# @Time : 2018/12/20 4:28 PM
# @Author : cxa
# @File : DictHelper.py
# @Software: PyCharm
# -*- coding: utf-8 -*-
# @Time : 2018/10/16 10:34
# @Author : cxa
# @File : dictMethod.py
# @Software: PyCharm
# -*- coding: utf-8 -*- """
requests.structures
~~~~~~~~~~~~~~~~~~~ Data structures that power Requests.
""" from collections import OrderedDict
from collections.abc import Mapping, MutableMapping, Iterable class CaseInsensitiveDict(MutableMapping):
"""A case-insensitive ``dict``-like object. Implements all methods and operations of
``MutableMapping`` as well as dict's ``copy``. Also
provides ``lower_items``. All keys are expected to be strings. The structure remembers the
case of the last key to be set, and ``iter(instance)``,
``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
will contain case-sensitive keys. However, querying and contains
testing is case insensitive:: cid = CaseInsensitiveDict()
cid['Accept'] = 'application/json'
cid['aCCEPT'] == 'application/json' # True
list(cid) == ['Accept'] # True For example, ``headers['content-encoding']`` will return the
value of a ``'Content-Encoding'`` response header, regardless
of how the header name was originally stored. If the constructor, ``.update``, or equality comparison
operations are given keys that have equal ``.lower()``s, the
behavior is undefined.
""" def __init__(self, data=None, **kwargs):
# 初始化的时候进入,初始化一个 OrderedDict()
self._store = OrderedDict()
if data is None:
data = {}
self.update(data, **kwargs) # 把属性加入到 self 的__dict__里,也是一个字典操作。 def __setitem__(self, key, value):
# key.lower() 把字符串转换成小写
# 这句话在属性赋值的时候会被调用。实现的无视字母大小写进行赋值
self._store[key.lower()] = (key, value)
# setattr(self,key.lower(),(key, value)) def __getitem__(self, key):
return self._store[key.lower()][1] def __delitem__(self, key):
del self._store[key.lower()] def __iter__(self):
return (casedkey for casedkey, mappedvalue in self._store.values()) # 调用父类的__iter__ def __len__(self):
return len(self._store) def lower_items(self):
"""Like iteritems(), but with all lowercase keys."""
return (
(lowerkey, keyval[1])
for (lowerkey, keyval)
in self._store.items()
) def __eq__(self, other):
if isinstance(other, Mapping):
other = CaseInsensitiveDict(other)
else:
return NotImplemented
# Compare insensitively
return dict(self.lower_items()) == dict(other.lower_items()) # Copy is required
def copy(self):
return CaseInsensitiveDict(self._store.values()) def __repr__(self):
# print 的时候会进入
print(isinstance(self.items(), Iterable)) # 输入可迭代对象,此时
##内部实际
# dict(iterable)
# d = {}
# for k, v in iterable: #会调用__iter__
# d[k] = v
return str(dict(self.items())) if __name__ == '__main__':
dic= {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh-TW;q=0.6",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"user-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
}
dic1 = CaseInsensitiveDict(dic) print(dic1.get("UseR-agEnt"))

python 字典不区分大小写工具类的更多相关文章

  1. Python基础之自定义工具类

    class ListHelper: @staticmethod def find_all(target, func_condition): """ 查找列表中满足条件的所 ...

  2. python字典不区分大小写

    from multidict import CIMultiDict dic=CIMultiDict() dic["key"]="1234" print(dic[ ...

  3. Java调用Python脚本工具类

    [本文出自天外归云的博客园] 在网上查了很多方法都不成功,在google上搜到一篇文章,做了一些小修改,能够处理中文输出.提取一个运行python脚本的Java工具类如下: package com.a ...

  4. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  5. Python数据库工具类MySQLdb使用

    MySQLdb模块用于连接mysql数据库. 基本操作 # -*- coding: utf-8 -*-       #mysqldb       import time, MySQLdb       ...

  6. 一个python爬虫工具类

    写了一个爬虫工具类. # -*- coding: utf-8 -*- # @Time : 2018/8/7 16:29 # @Author : cxa # @File : utils.py # @So ...

  7. Python中xml、字典、json、类四种数据的转换

    最近学python,觉得python很强很大很强大,写一个学习随笔,当作留念注:xml.字典.json.类四种数据的转换,从左到右依次转换,即xml要转换为类时,先将xml转换为字典,再将字典转换为j ...

  8. Python工具类(二)—— 操作时间相关

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '操作时间的工具类' "" ...

  9. Python工具类(一)—— 操作Mysql数据库

    如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...

随机推荐

  1. How-to: Do Statistical Analysis with Impala and R

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  2. MySql笔记二:命令简介

    从笔记二开始讲解一些简单的命令,这些我在SQL Server里面都讲过了,什么主键,约束啥的数据库这些都是相通的,所以MySql这里,不讲,粗略过一遍. 使用命令框登录MySql mysql -u r ...

  3. hdu 6380

    #include<bits/stdc++.h> #define in(a) scanf("%d",&a) using namespace std; struct ...

  4. JVM垃圾回收机制与内存回收

    暂时转于:https://blog.csdn.net/qq_27035123/article/details/72857739 垃圾回收机制 GC是垃圾回收机制,java中将内存管理交给垃圾回收机制, ...

  5. python3 bytes数据类型探讨

    python3中str和bytes分开了,那么bytes与str之间到底是什么关系呢?下面从表现形式.处理方式.存储形式三个方面来阐述其区别 1. 在字符串前面加上b,就表示bytes数据类型 s1 ...

  6. C# FTPHelper工具类

    /// <summary> /// Ftp /// </summary> public class FtpFileOperation { private string _ftp ...

  7. Java EE之Struts2异常[No mapping found for dependency [type=java.lang.String, name='actionPackages'#java.lang.RuntimeException]【摘抄】

    本博文摘自:http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html 出现这个问题,可能是添加了struts2-codebehind包 ...

  8. Ubuntu18.04使用AndroidStudio3.2.1编译TensorFlow android demo【2018年12月】

    按照官方教程修改下面3处即可编译完成. 修改部分: 在build.gradle文件里修改以下部分: 1.原来: buildscript { repositories { jcenter() } dep ...

  9. Linux基础学习【规则与安装】

    一.主分区.扩展分区与逻辑分区的特性: 主分区与扩展分区最多可以有4个(硬盘的限制) 扩展分区最多只能有1个 逻辑分区是由扩展分区持续切割出来的分区 能够被格式化后作为数据访问的分区为主分区和逻辑分区 ...

  10. spring cloud(学习笔记)微服务启动错误(1)

    今天下午在启动spring cloud微服务的时候,报了这个错误: Error starting ApplicationContext. To display the auto-configurati ...