首页 > 编程语言 >Python创建字典与fromkeys的坑

Python创建字典与fromkeys的坑

时间:2024-08-28 15:54:54浏览次数:9  
标签:None fromkeys Python dict np data 字典

字典很重要

字典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: []}

标签:None,fromkeys,Python,dict,np,data,字典
From: https://www.cnblogs.com/python1111/p/18384949

相关文章

  • Python 判断质数的另一种方法
    质数就是大于等于2且只能被它本身及1整除的数,百度上关于质数的性质和相关的公式还有很多,不过有点高深难懂,尤其是对我这个数学不好的人来说。网上python判断质数的方法大多是下面这种:frommathimportsqrtdefis_prime(n):ifn==1: print("此数为不质数")......
  • Python中几种lambda排序方法
    1.对单个变量进行排序#lst=[[5,8],[5,3],[3,1]]lst.sort(key=lambdax:x[1])#lst=[[3,1],[5,8],[5,3]]以元素的第二个元素升序排列2.对多个变量进行排序#lst=[[5,8],[5,3],[3,1]]lst.sort(key=lambdax:(x[1],x[0]))#lst=[[3,1],[5,3],[5,8]]以元素的......
  • Python调用shell cmd的几种方式
    1.使用os.system()去调用,但是只能返回执行状态,不能获取shellcmd执行结果importosstatus=os.system("psaux|grepXcode|grep-vgrep")print(status)2.使用os.popen执行并获取结果​如果返回是str,直接通过read拿结果使用,如果是多行,选择readlines转list获取每行内容......
  • 高斯坐标转WGS84 GPS坐标 C#版本 python版本和C++版本 3度带进行投影 三个版本的代码
    找了很久,都没有很靠谱的版本,这个是自己从C#版本转换的另外两个版本完整代码可以用经过了对比核对计算,确保3个版本之间的计算结果是一致的C#版本:GPSPointGSXYToGPS(doubleX,doubleY,doubleL0){//X=571879.3482847388;//Y=2770741.66......
  • java如何运行Python文件程序
    有时候会遇到在java中启动Python的程序,下面进行说明packagecom.zxh.util;importlombok.extern.slf4j.Slf4j;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;/***python执行器**@Au......
  • python optional import
    Python的可选导入:提升代码可读性与简洁性的利器在Python编程中,我们常常会使用到各种库和模块。为了方便使用这些库和模块,我们需要通过导入语句将其引入到我们的程序中。然而,随着项目规模的增大,导入语句可能会变得越来越复杂,这不仅增加了代码的长度,也降低了代码的可读性。那么,有没......
  • Python内置的getclassname()函数
    Python是一种广泛使用的编程语言,其在面向对象编程方面具有显著优势。为了更好地理解和应用这一领域的基础知识,熟悉Python编程中类的相关操作是非常重要的。本文主要介绍如何使用Python内置的getclassname()函数获取类的名称,并通过实际代码示例来演示该函数的使用。首先,我们需要了......
  • 信息熵计算程序[Python+CSV格式数据集]
    0前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。程序中包含了计算过程的数据和详细信息以及最终计算结果。编程语言为Python,搭配CSV数据格式使用。1数据集1.1游玩数据集根据天气状......
  • 分享一个基于Python的程序员薪资数据分析可视化与岗位推荐系统flask爬虫毕设(源码、调
    ......
  • Python中的分布式框架Ray的安装与使用
    技术背景假设我们在一个局域网内有多台工作站(不是服务器),那么有没有一个简单的方案可以实现一个小集群,提交分布式的任务呢?Ray为我们提供了一个很好的解决方案,允许你通过conda和Python灵活的构建集群环境,并提交分布式的任务。其基本架构为:那么本文简单的介绍一下Ray的安装与基......