字典很重要
字典dict 是Python中很重要的一个数据类型, 通过键值映射, 能够很好的定位查找.
Django, Flask这些Web框架在做前后端分离时, 就是用字典传数据的, 因为它和列表list 配合起来, 能够很好的与json格式的数据相互转化. 用Flask + Echarts做数据可视化大屏, 传的变量都是字典和列表.
简单创建字典
这是最简单的创建字典的方式:
dic = {'key1': 'value1', 'key2': 'value2'}
dic = dict(key1='value1', key2='value2')
快速创建字典
但当数据特别多的时候, 一个个手敲键值构造字典, 这样非常麻烦.
Python提供了许多快速创建字典的方式,
>>> d = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d
{'one': 1, 'two': 2, 'three': 3}
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> d
{'two': 2, 'one': 1, 'three': 3}
fromkeys
除此之外还有一个超级nb的方法, fromkeys. 为什么说他nb呢?
>>> import numpy as np
>>> data = dict.fromkeys(np.arange(10))
>>> data
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>> data = dict.fromkeys(np.arange(10), '都是一样的')
>>> data
{0: '都是一样的', 1: '都是一样的', 2: '都是一样的', 3: '都是一样的', 4: '都是一样的', 5: '都是一样的', 6: '都是一样的', 7: '都是一样的', 8: '都是一样的', 9: '都是一样的'}
比如我执行一个sql语句, 返回一个巨大的元组或列表, 而我又暂时不确定它的值是什么, 就可以这样批量创建, 值先为None, 或者随便赋一个值
我对它真是有爱又恨, 它的一个弊端: 值必须是一个不可变对象
-
可变对象: int, str, float, tuple
-
不可变对象: list, dict
这意味着不可以设它的值为list 或dict, 这可糟了呀, 往Echarts传值大多都是dict+list, 还有pandas中的DataFrame等都是dict+list的格式, 像这种:
from pandas import DataFrame
data = {
'Singer': ['the rolling stones', 'Beatles', 'Guns N Roses', 'Metalica'],
'Song_name': ['Satisfaction', 'Let it Be', 'Don’t Cry', 'Nothing Else Matters'],
'Year': [2000, 2001, 2000, 2002]
}
music_data2 = DataFrame(data)
看一看如果偏要设值为list对发生什么:
>>> import numpy as np
>>> data = dict.fromkeys(np.arange(10), [])
>>> data[1].append('a')
>>> data
{0: ['a'], 1: ['a'], 2: ['a'], 3: ['a'], 4: ['a'], 5: ['a'], 6: ['a'], 7: ['a'], 8: ['a'], 9: ['a']}
wc***, fromkeys你不讲码德, 我只是修改了键为1的值, 怎么全都修改了!!!
那就这样完了吗?
可以先把设为一个不可变类型, 比如字符串str, 最后再将它转化成想要的列表就成功啦
>>> import numpy as np
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:857662006
>>> data = dict.fromkeys(np.arange(10), '')
>>> data[1] += 'a,'
>>> data[1] += 'b,'
>>> data = {key: value.split(',')[:-1] for key, value in data.items()}
>>> data
{0: [], 1: ['a', 'b'], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容