为什么不能用dict()函数将str数据转换成字典类型

这问题很蠢哈,但是以前最开始接触python的时候,正好接触了python的很多数据类型转换的知识点,对于python极为便捷的数据类型互相转换,那是叹为观止。
        但是好巧不巧的,实际上最常用的反而是json格式的数据,因此经常要和dict 类型的数据打交道。
        由于思维惯性,最常犯的错误就是“str()能直接转字符串,那dict()就能转字典”,真的就像着魔似的,总是往这错的地方想,最后为了避免总犯低级错误,还是认真了解了一下为啥dict() 不能用于str数据类型转换。

#我们先重现一下自己犯的错误
#将一个自定义的字符串,通过dict()函数直接转dict
json_str=r'{"key":"valuea"}'
new_json=dict(json_str)
print(new_json)
#执行会看到报错
#>>>new_json=dict(json_str)
#>>>ValueError: dictionary update sequence element #0 has length 1; 2 is required# 为什么会报错?其实翻看具体的函数信息,就能看到这个函数注释给我们的答案
# 因为dict() 表示建立一个空的字典数据
# dict(mapping)  通过一个mapping对象进行初始化,新建一个字典
# dict={}
# for k,v in iterable:
#       dict[k]=v
# iterable 表示可迭代对象,也就是可以循环获取数据的对象
# csv 文件、另一个字典、一个list里的多个数据、一个元组里的多个元素,这些都是天然的可迭代对象
'''
def __init__(self, seq=None, **kwargs):  # known special case of dict.__init__"""dict() -> new empty dictionarydict(mapping) -> new dictionary initialized from a mapping object's(key, value) pairsdict(iterable) -> new dictionary initialized as if via:d = {}for k, v in iterable:d[k] = vdict(**kwargs) -> new dictionary initialized with the name=value pairsin the keyword argument list.  For example:  dict(one=1, two=2)# (copied from class doc)"""
'''
pass

简单了解dict 数据类型

#dict是一种键值对的格式,在有些程序里也叫map,例如JavaScript
#当然,如果说另一种格式,会更熟悉:json
{"key":"123","key2":"abc"
}
#dict() 对key的要求是:key 必须是一种不可变的数据类型。
#python中,“不可变”的数据类型包括:string、int

dict字典到底怎么赋值?

dict的赋值方式有三种:
#1、通过初始化固定dict的key-value
test_dict={"key":"123456"}#2、通过指定key将数据放入dict
#由于一个key只能放入一个value,所以如果重复,则会将此前的数据冲掉。
test_dict={}
test_dict["test1"]="1"
#此时字典的key和value会同时存入字典#3、通过读取具备成对关系的csv文件,文件中只有两列数据
#设file_name='data.csv'
file=open(file_name,'r')
table=csv.reader(file)
dic=dict(table)
#此时print(dic)就会发现,已经获得一个完美的json串,或者说字典数据了

那遇到str类型的json数据,要怎么传?

json_str=r'{"key":"valuea"}'
new_json=eval(json_str)
print(new_json)
#···> 此时,我们会看到数据以我们想要的dict字典格式,展现了
{'key': 'valuea'}

关于eval() 函数

def eval(*args, **kwargs): # real signature unknown"""Evaluate the given source in the context of globals and locals.The source may be a string representing a Python expressionor a code object as returned by compile().The globals must be a dictionary and locals can be any mapping,defaulting to the current globals and locals.If only globals is given, locals defaults to it."""pass
虽然我们并不是特别明白,所说的“任何映射”具体是指什么
但是全局变量,必须是字典格式
The globals must be a dictionary

为什么不能用dict()函数将str数据转换成字典类型相关推荐

  1. python中str数据转换成datetime的方法

    datetime数据介绍 首先附上官方python库中对datetime数据的介绍链接: https://docs.python.org/3/library/datetime.html?highlig ...

  2. 将undefault和null的数据转换成bool类型的数据 使用!!

    <script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...

  3. 将excel转为python的字典_python读取excel数据转换成字典

    以上面的excel格式,输出字典类型: import xlrd def read_excel_data(): filename = 'E:\学历列表.xls' data = xlrd.open_wor ...

  4. python将str写入csv_【python3】中str转成bytes类型后用csv.writerow()写入csv文件仍然出错...

    根本原因是Python版本问题python2.x中要求用'wb',python3.x中要求用'w' 首先声明:CSV文件是可以用二进制模式写入的 python文档(传送门)关于CSV的一个用法示例: ...

  5. python dict()函数(用于创建一个字典)

    from builtins.py def __init__(self, seq=None, **kwargs): # known special case of dict.__init__" ...

  6. 如何在C++中方便的将float、int等类型数据转换成string类型,并利用ROS中的std_msg/String发布出去

    在ROS系统中有时候我们需要利用标准的消息类型如std_msg/String等进行发布某些数据,这就需要将不同的数据类型进行相互转化,比如: float -->string      int-- ...

  7. 数据转换成tfrecord类型并完成读取

    前提: tensorflow --1.13.1 numpy --1.16.2 python --3.6.5 本例转换 泰坦尼克号数据集 链接 密码:n8wz 数据预览: 字段说明: Passenger ...

  8. 如何将double类型的数据转换成String类型

    在EditText中使用setText()方法要求传入的数据类型为String类型,若想将double类型的数据在此方法中输出,则需要将double类型的数据转成String类型. double d ...

  9. Python将读取到的字符串文本数据转换成数字类型列表和数组

    最近在用Python,做一个小脚本,有个操作就是要读取文本框中的内容然后将其转换成数组对象再进行相关操作.但读取到的文本是字符串类型的,所以,得进行一波小操作了嘿.

最新文章

  1. 设置apache目录认证
  2. happens-before规则和指令重排
  3. Django的路由层
  4. javascript 将时间戳格式化
  5. java基础--集合框架的认识
  6. elementUI中的Backtop回到顶部
  7. nginx 引号 x22
  8. 2016.7.31整机升级计划
  9. JVM、DVM(Dalvik VM)和ART虚拟机的区别
  10. BUUCTF ------findkey
  11. phpcms上传图片去除水印
  12. workbook对象需要关闭_Excel VBA解读(92):Workbook对象的Open事件和BeforeClose事件
  13. 对象存储OSS基本概念讲解
  14. 全球及中国护肤品行业产量规模走势与销售前景研究报告2022版
  15. 域名解析、域名空间绑定,两种截然不同概念
  16. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x9a in position 174: illegal multibyte sequence
  17. 顺丰慢吗,了解这些问题你就能得到答案
  18. C语言编程计算下列算式的值
  19. 【听】人性的弱点,人际关系交往的鸡汤宝典
  20. 不同电脑之间共享键鼠:sharemouse

热门文章

  1. python 导包 numpy_导入Python包时出错(例如Numpy)
  2. Vue实现购物车完整代码
  3. 【CarMaker学习笔记】Model Check 功能介绍
  4. 第三章 无人机进阶(一) 无人机传感器部分
  5. ibm i2 Analyst‘s Notebook8.91
  6. 如何制作U盘Linux 与WinPE启动
  7. Java的下载安装和环境配置
  8. DNS原理及映射关系
  9. Element-ui和Element-Plus的区别_Element2和Element3的区别
  10. ios查看帧率的软件_iOS实时流畅性监控