今天来聊聊python中的字典在数据分析中的应用,为了贴近实战关于简单结构的字典就略过。

今天要聊的字典结构是如下这类复杂结构:

{

"id": "2406124091",

"type": "node",

"visible":"true",

"created": {

"version":"2",

"changeset":"17206049",

"timestamp":"2013-08-03T16:43:42Z",

"user":"linuxUser16",

"uid":"1219059"

},

"pos": [41.9757030, -87.6921867],

"address": {

"housenumber": "5157",

"postcode": "60625",

"street": "North Lincoln Ave"

},

"amenity": "restaurant",

"cuisine": "mexican",

"name": "La Cabana De Don Luis",

"phone": "1 (773)-271-5176"

}

这类数据结构是为了方便写成JSON,或者存入MongoDB使用而存在的。为了便于理解和掌握这种复杂字典的操作方式,我们采取几个有趣的实验,来感受一下:

一、复杂结构字典是否可以拆分成简单结构的字典

如果把这个复杂结构拆分成几个结构简单的小字典或者列表,那么处理起来就会简单许多:

##第一个小字典

{"id": "2406124091",

"type": "node",

"visible":"true"}

##第二个小字典

{"version":"2",

"changeset":"17206049",

"timestamp":"2013-08-03T16:43:42Z",

"user":"linuxUser16",

"uid":"1219059"}

##一个小列表

[41.9757030, -87.6921867]

##第三个小字典

{"housenumber": "5157",

"postcode": "60625",

"street": "North Lincoln Ave"}

##第四个小字典

{"amenity": "restaurant",

"cuisine": "mexican",

"name": "La Cabana De Don Luis",

"phone": "1 (773)-271-5176"}

接下来,我们看看用哪种方法可以进行合并:

d1 = {"id": "2406124091",

"type": "node",

"visible":"true"}

d2 = {"version":"2",

"changeset":"17206049",

"timestamp":"2013-08-03T16:43:42Z",

"user":"linuxUser16",

"uid":"1219059"}

l1 = [41.9757030, -87.6921867]

d3 = {"housenumber": "5157",

"postcode": "60625",

"street": "North Lincoln Ave"}

d4 = {"amenity": "restaurant",

"cuisine": "mexican",

"name": "La Cabana De Don Luis",

"phone": "1 (773)-271-5176"}

d = {d1,d2,l1,d3,d4}

#Traceback (most recent call last):

#

# File "", line 1, in

# d = {d1,d2,l1,d3,d4}

#

#TypeError: unhashable type: 'dict'

###简单粗暴的合并,可惜这样的合并是不可行的

###尝试加上标签后进行合并

d = d1

d['created'] = d2

d['pos'] = l1

d['address'] = d3

d = dict(d,**d4)

pprint.pprint(d)

#{'address': {'housenumber': '5157',

# 'postcode': '60625',

# 'street': 'North Lincoln Ave'},

# 'amenity': 'restaurant',

# 'created': {'changeset': '17206049',

# 'timestamp': '2013-08-03T16:43:42Z',

# 'uid': '1219059',

# 'user': 'linuxUser16',

# 'version': '2'},

# 'cuisine': 'mexican',

# 'id': '2406124091',

# 'name': 'La Cabana De Don Luis',

# 'phone': '1 (773)-271-5176',

# 'pos': [41.975703, -87.6921867],

# 'type': 'node',

# 'visible': 'true'}

###成功完成复杂字典的合并,但是有个问题,顺序不对。在一些特定应用场景中,字典中的数据结构

###是被严格要求的。那么需要继续进行带有顺序要求的控制。

d = {'created':d2,'pos':l1,'address':d3}

pprint.pprint(d)

#{'address': {'housenumber': '5157',

# 'postcode': '60625',

# 'street': 'North Lincoln Ave'},

# 'created': {'changeset': '17206049',

# 'timestamp': '2013-08-03T16:43:42Z',

# 'uid': '1219059',

# 'user': 'linuxUser16',

# 'version': '2'},

# 'pos': [41.975703, -87.6921867]}

#

###成功完成了按顺序的合并,但是d1和d4的字典却无法进行可控的合并,采用dict()函数合并后,

###元素会添加在最后,这就又回到最初的情况

二、由上一个实验可知,两个字典直接合并可行,但结构顺序无法控制,需要对一些结构进行再分解。

d1 = {"id": "2406124091"}

d2 = {"type": "node"}

d3 = {"visible":"true"}

d4 = {"version":"2",

"changeset":"17206049",

"timestamp":"2013-08-03T16:43:42Z",

"user":"linuxUser16",

"uid":"1219059"}

l1 = [41.9757030, -87.6921867]

d5 = {"housenumber": "5157",

"postcode": "60625",

"street": "North Lincoln Ave"}

d6 = {"amenity": "restaurant"}

d7 = {"cuisine": "mexican"}

d8 ={"name": "La Cabana De Don Luis"}

d9 = {"phone": "1 (773)-271-5176"}

拆分完之后是这个样子:

d = {'id':d1,'type':d2,'visible':d3,'created':d4,'pos':l1,'address':d5,

'amenity':d6,'cuisine':d7,'name':d8,'phone':d9}

import pprint

pprint.pprint(d)

#{'address': {'housenumber': '5157',

# 'postcode': '60625',

# 'street': 'North Lincoln Ave'},

# 'amenity': {'amenity': 'restaurant'},

# 'created': {'changeset': '17206049',

# 'timestamp': '2013-08-03T16:43:42Z',

# 'uid': '1219059',

# 'user': 'linuxUser16',

# 'version': '2'},

# 'cuisine': {'cuisine': 'mexican'},

# 'id': {'id': '2406124091'},

# 'name': {'name': 'La Cabana De Don Luis'},

# 'phone': {'phone': '1 (773)-271-5176'},

# 'pos': [41.975703, -87.6921867],

# 'type': {'type': 'node'},

# 'visible': {'visible': 'true'}}

###没有出现我们想要的结果,除了结构是混乱的之外,重新构建的字典中,数据结构也出现的明显的

###错误。尝试另外一种构建方式:

d = {d1,d2,d3,'created':d4,'pos':l1,'address':d5,d6,d7,d8,d9}

d = {d1,d2,d3,d4,l1,d5,d6,d7,d8,d9}

#Traceback (most recent call last):

#

# File "", line 1, in

# d = {d1,d2,d3,d4,l1,d5,d6,d7,d8,d9}

#

#TypeError: unhashable type: 'dict'

d = {d1,d2,d3,d4,'pos':l1,d5,d6,d7,d8,d9}

# File "", line 1

# d = {d1,d2,d3,d4,'pos':l1,d5,d6,d7,d8,d9}

# ^

#SyntaxError: invalid syntax

#

###这种构建方式,过于异想天开了,语法是错误的。

###dict()函数合并的方式我不打算尝试了,应为其中的l1是list,这个是无法用这个函数合并的。

三、直接固定字典的格式,然后对其填充数值或者内容

d = {

"id": "",

"type": "",

"visible":"",

"created": {

"version":"",

"changeset":"",

"timestamp":"",

"user":"",

"uid":""

},

"pos": [0,0],

"address": {

"housenumber": "",

"postcode": "",

"street": ""

},

"amenity": "",

"cuisine": "",

"name": "",

"phone": ""

}

d['id']='2406124091'

d['address']['housenumber']='123456'

pprint.pprint(d['id'])

#'2406124091'

pprint.pprint(d['address'])

#{'housenumber': '123456', 'postcode': '', 'street': ''}

###成功完成写入操作,这种方式需要配合循环和条件判断语句使用。好处是,让数据结构得以固定。

最后,编程这事,没有唯一答案,条条道路通罗马。找到自己最喜欢最顺手的方式是最好的。

其实还有一种方法是使用eval()函数,但介于广大高手们痛恨和鄙视使用该函数,所以这里就不在对这个函数的用法进行探讨。

python中字典数据的特点_Python字典(Dictionary) 在数据分析中的操作相关推荐

  1. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。...

    [单选题]李明在他所属的公司工作五年,每天都很认真地处理繁杂的事情,同事们都夸他认真,但是依然没有建树,这是因为: [多选题]品牌标志的作用表现在 [单选题]新产品开发的第一个阶段是_______. ...

  2. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。(4.0分)_学小易找答案...

    [单选题]文本文件存储的是(),由若干文本行组成,通常每行以换行符 '\n' 结尾.(4.0分) [单选题]()属性是返回被打开文件的访问模式.(4.0分) [单选题]重力坝是由砼或( )修筑而成的大 ...

  3. Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet

    Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet 发表时间:2020-04-26 问题:从当前目录或子目录中查询符合条件的excel表格,并从这 ...

  4. 程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据。...

    程序通过定义学生结构体变量,存储学生的学号.姓名和3门课的成绩.函数fun的功能是:对形参b所指结构体变量中的数据进行修改,并在主函数中输出修改后的数据.例如,若b所指变量t中的学号.姓名和三门课的成 ...

  5. matlab将数据输出到excel中,matlab数据输出为excel表格-如何把matlab中的数据导到excel表格中...

    如何将matlab工作空间的数据导出到excel 1.很简单的用xlswrite函数就可以了.首先打开matlab,输入你的代码 2.找到你要存放文件的位置复制绝对路径(致谢文件名的话就会存放在当前目 ...

  6. 实例讲解用.NET技术将Excel表格中的数据导入到特定的SQL Server数据库中

    由于管理需要,公司决定上一套信息管理系统,将原来的用Excel所做的记录用管理系统来管理.通过努力,我终于作了一套类似<牛腩新闻发布系统>的客户信息管理系统.可原来的Excel中的数据该如 ...

  7. python字典怎么添加值_python字典中如何添加键值对

    添加键值对 首先定义一个空字典 1 >>> dic={} 直接对字典中不存在的key进行赋值来添加 1 2 3 >>> dic['name']='zhangsan' ...

  8. python定义一个字典并遍历字典中的键和值_python字典操作总结

    创建 方法一: 方法二:从Python 2.2 版本起,可以使用一个工厂方法,传入一个元素是列表的元组作为参数 方法三: 从Python 2.3 版本起, 可以用一个很方便的内建方法fromkeys( ...

  9. python字典如何删除数据库_Python 字典删除元素clear、pop、popitem

    同其它python内建数据类型一样,字典dict也是有一些实用的操作方法.这里我们要说的是字典删除方法:clear().pop()和popitem(),这三种方法的作用不同,操作方法及返回值都不相同. ...

最新文章

  1. 趋势科技、亚马逊AWS作后盾,天云趋势首款SaaS安全服务强势来袭
  2. [原][osg][gdal]两种方式修改tiff高程
  3. 【模型开发】逐步回归
  4. 分类图 Class Diagram
  5. python解释器可以使用什么命令_python解释器用什么写的
  6. 国内用户ios android比例,国内iOS、Android系统的设备总量已达到了2亿
  7. Codeforces Round #506 (Div. 3) - C. Maximal Intersection (思维,模拟)
  8. 多个openstack合并成一个openstack的多个region
  9. MoinMoin Wiki 1.7优化与维护经验
  10. JQuery Datatables辅助函数
  11. 吴恩达《深度学习》 学习笔记1
  12. Python模块-decimal
  13. c语言程序设计自考真题,自学考试《C语言程序设计》随堂试题及答案
  14. 我为NET狂~群福利:逆天书库
  15. python输出内容到终端的函数_如何通过Python函数运行的可执行文件的终端输出以一般方式静音?...
  16. iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名
  17. texlive的安装
  18. 网易mysql微专业_网易MySQL数据库工程师微专业学习笔记(一)
  19. [转载] 晓说——第26期:艺术北纬三十度 回忆印度(上)
  20. 后台管理页面左侧导航栏

热门文章

  1. html图片菱形,CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
  2. 大学html5毕业设计任务书,2021届本科生毕业设计(论文)工作的通知
  3. html插入swf自动播放,[转载]网页中插入FLASH(swf文件)的html代码
  4. 法律人如何使用python_执业10年,我见过太多法律人掉进这个大坑!
  5. C语言-结构体函数(录入书本的信息)
  6. TaskSnapshot保存应用画面截图快照的处理过程
  7. GDOI2017游记
  8. 李含光《C语言程序设计教程》答案第一——四章
  9. 移动端微信、QQ浏览器 web 用 rem 单位适配不生效问题
  10. 记一次暴力破解tomcat后台密码(附带python脚本)