Python 是一个解释型语言
简单来说,就是Python文件在执行的时候 基本上 就是 我们的代码被解释器一行行的解释成 计算机能够理解的源码,然后一行行的执行。
但是在解释执行前,Python会对所有的代码进行一次 通篇的语法检查,这个时候就会报出语法错误 (SyntaxError) , 题主的问题就是这样的。 所以当我们看到 SyntaxError 时,应该是最不用担心的时候了,因为 真正需要担心的还没有开始嘛(解释运行时),这时候报的错,都是些小错,语法错误。
字典基本用法:
Python 中的字典是Python中一个键值映射的数据结构,下面介绍一下如何优雅的操作字典.
1.1 创建字典
Python有两种方法可以创建字典,第一种是使用花括号,另一种是使用内建 函数dict
>>> info = {}
>>> info = dict()
1.2 初始化字典
Python可以在创建字典的时候初始化字典
>>> info = {"name" : 'cold'}
>>> info = dict(name = 'cold') # 更优雅
很明显第二种方法更加的优雅和减少一些特殊字符的输入,但是有种情况第二种不能胜任
>>> key = 'name'
>>> info = { key :'cold'} # {'name':'cold'}
>>> info = dict(key = 'cold') # {'key': 'cold'}
明显第二种方法就会引发一个不容易找到的bug
Python字典还有一种初始化方式,就是使用字典的fromkeys方法可以从列表中获取元素作为键并用None或fromkeys方法的第二个参数初始化
>>> info = {}.fromkeys(['name', 'blog'])
{'blog': None, 'name': None}
>>> info = dict().fromkeys(['name', 'blog'])
{'blog': None, 'name': None}
>>> info = dict().fromkeys(['name', 'blog'], 'linuxzen.com')
{'blog': 'linuxzen.com', 'name': 'linuxzen.com'}
1.3 优雅的获取键值
字典可以这样获取到键的值
>>> info = {'name':'cold', 'blog':'linuxzen.com'}
>>> info['name']
'cold'
但是如果获取不存在的键的值就会触发的一个KeyError异常,字典有一个get方法,可以使用字典get方法更加优雅的获取字典
>>> info = dict(name= 'cold', blog='www.linuxzen.com')
>>> info.get('name')
'cold'
>>> info.get('blogname')
>>> info.get('blogname', 'linuxzen')
'linuxzen'
我们看到使用get方法获取不存在的键值的时候不会触发异常,同时get方法接收两个参数,当不存在该键的时候就会返回第二个参数的值 我们可以看到使用get更加的优雅
如果字典已知,我们可以任选一个,而当我们不确定字典中是否存在某个键时,我之前的做法如下
if 'age' in a.keys():
print a['age']
因为不先判断的话,直接使用a[‘age’]会导致报错keyerror,提示没有该key的值。
而是用a.get(‘age’) 则不会产生错误,解析器返回值如果存在就返回相应的value, 如果不存在就返回None.
if a.get('age'):
print a['age']
而想要改变value 的值,则需要通过
a[‘name’]=’Jack’
使用a.get(‘name’) = ‘Jack’
编译器则会提示 SyntaxError: can’t assign to function call
1.4 更新/添加
Python 字典可以使用键作为索引来访问/更新/添加值
>>> info = dict()
>>> info['name'] = 'cold'
>>> info['blog'] = 'linuxzen.com'
{'blog': 'linuxzen.com', 'name': 'cold'}
{'blog': 'linuxzen.com', 'name': 'cold night'}
同时Python字典的update方法也可以更新和添加字典
>>> info = dict(name='cold', blog='linuxzen.com')
>>> info.update({'name':'cold night', 'blogname':'linuxzen'})
{'blog': 'linuxzen.com', 'name': 'cold night', 'blogname': 'linuxzen'}
>>> info.update(name='cold', blog='www.linuxzen.com') # 更优雅
{'blog': 'www.linuxzen.com', 'name': 'cold', 'blogname': 'linuxzen'}
Python字典的update方法可以使用一个字典来更新字典,也可以使用参数传递类似dict函数一样的方式更新一个字典,上面代码中哦功能的第二个更加优雅,但是同样和dict函数类似,键是变量时也只取字面值
1.5 字典删除
可以调用Python内置关键字del来删除一个键值
>>> info = dict(name='cold', blog='linuxzen.com')
{'blog': 'linuxzen.com', 'name': 'cold'}
>>> del info['name']
{'blog': 'linuxzen.com'}
同时也可以使用字典的pop方法来取出一个键值,并删除
>>> info = dict(name='cold', blog='linuxzen.com')
>>> info.pop('name')
'cold'
{'blog': 'linuxzen.com'}
1.6 遍历
user = {
'first': 'dfe',
'username':'ddd',
'last':'dfe'
for key,value in user.items():
print(key + value)
# firstdfe
# usernameddd
# lastdfe
注意:python3.6改写了dict内部算法,3.6的dict是有序的(遍历字典时键值对返回的顺序与存储顺序相同),在此本本之前是无序的
1.7 其他操作
获取所有key
>>> info = dict(name='cold', blog='linuxzen.com')
>>> info.keys()
['blog', 'name']
获取key,value并循环
>>> info = dict(name='cold', blog='linuxzen.com')
>>> for key, value in info.items():
... print key, ':', value
blog : linuxzen.com
name : cold
将列表[1,2,3,4,5,6,7,8,9]中大于5的添加到字典的键为k1中,其余存储到键为k2中
方法1、常规思路
list = [1,2,3,4,5,6,7,8,9]
def dictSort():
dict = {}
for item in list:
if item > 6:
if 'k1' in dict.keys():
dict['k1'].append(item)
else:
dict['k1'] = [item]
else:
if 'k2' in dict.keys():
dict.get('k2').append(item)
# dict.get('k2') = item # can't assign to function call
else:
dict['k2'] = [item]
print(dict) # {'k2': [1, 2, 3, 4, 5, 6], 'k1': [7, 8, 9]}
if __name__ == '__main__':
dictSort()
注意:1、语法错误: 不能给(can't) 函数(function)调用(call) 赋值(assign)
2、dict['k2'] = item是无错的,实际dict['k2']是一个list
方法3、dict的setdefault()方法
list = [1,2,3,4,5,6,7,8,9]
def dictSort():
dict = {}
for item in list:
if item > 6:
dict.setdefault('k1',[]).append(item)
else:
dict.setdefault('k2', []).append(item)
print(dict) # {'k2': [1, 2, 3, 4, 5, 6], 'k1': [7, 8, 9]}
if __name__ == '__main__':
dictSort()
使用collections.defaultdict().
# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def defDictSort():
dic = collections.defaultdict(list)
# loop list
for value in all_items:
if value >66:
dic["k1"].append(value)
else:
dic["k2"].append(value)
print(dic)
if __name__ == '__main__':
defDictSort()
输出结果
defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]})
定义字典变量的时候,原来还要指定values的属性,最开始写成了下面这样
dic = collections.defaultdict()
使用D.fromkeys()生成一个“默认”的字典。然后根据条件再去追加values.
# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictByFromKeys():
dic = {}.fromkeys(("k1", "k2"))
# get values by loop list
for value in all_items:
if value > 66:
if dic["k1"] is None:
dic["k1"] = [value]
else:
dic["k1"].append(value)
else:
if dic["k2"] is None:
dic["k2"] = [value]
else:
dic["k2"].append(value)
print(dic)
if __name__ == '__main__':
dictByFromKeys()
结果输出如下所示:
{'k1': [77, 88, 99], 'k2': [11, 22, 33, 44, 55, 66]}
代码写完调试的时候,fromkeys()默认的value是None,上来拿到list的元素后就直接判断append了,导致报错:NoneType 没有append属性。
然后间接转换了一下,先去判断是否为None,如果是就直接赋值,如果不是,那证明已经有数据加入了,然后再使用append方法就没问题了。
借助defaultdict跟set,但缺点是,values是无序的。
# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictBySet():
dic = collections.defaultdict(set)
# loop list
for value in all_items:
if value > 66:
dic["k1"].add(value)
else:
dic["k2"].add(value)
print(dic)
if __name__ == '__main__':
dictBySet()
输出结果:
defaultdict(<class 'set'>, {'k1': {88, 99, 77}, 'k2': {33, 66, 11, 44, 22, 55}})
方法借鉴:https://blog.csdn.net/huyangshu87/article/details/52681478
字典基本用法:问题: 将列表[1,2,3,4,5,6,7,8,9]中大于5的添加到字典的键为k1中,其余存储到键为k2中方法1、常规思路list = [1,2,3,4,5,6,7,8,9]def dictSort(): dict = {} for item in list: if item > 6: if...
列表里追加字典时,列表最后一项被覆盖。在构造一个结构数据时发现这个问题为什么会被覆盖呢?写一个demo测试一下问题解决问题的方法
在构造一个结构数据时发现这个问题
为什么会被覆盖呢?
第一次遇到这个问题,真的是一脸懵逼,把所有步骤的数据打印查看到底问题出在哪里,结果发现所有地方的数据都是按照预想的流程运行的,问题出在了list.append(dict),追加了之后发现列表里的每项数据都一样了。
写一个demo测试一下问题
>>> item={} ; items=[] #先声明一个字
1.在 Python 中使用 update() 方法将字典添加到另一个字典
2.使用字典解包运算符**在 Python 中将字典添加到另一个字典
3.在 Python 中使用|运算符将字典添加到另一个字典
4.使用 collections.ChainMap 容器在 Python 中将字典添加到另一个字典
Python 中的字典以键值对的形式构成一组元素。它是一个无序且可变的集合。
在本教程中,我们将讨论在 Python 中将字典附加到另一个字典的不同方法。
在 Python 中使用 update()
首先我们要明白
字典的写法。 现在有
字典dict_1 = {},
字典dict_2 = {'name': 'Lihua', 'age': 19} ,dict_3 = {'name': '小红', 'age': 18}我们想将
字典dict_2和
字典dict_3加入到dict_1中,我们可以这么写
键(key)的名字可以按自己的要求写,或者可以写一个循环用数字来作为键
使用dict.setdefault()可设置一个默认值,如果key已存在,就不会有其他操作,借此我们可以不用在追加数据时判断key的存在:
my_dict = {} # 建立一个空字典
my_dict.setdefault("key", []) # 设置默认键
print("a" in my_dict['key']) # 判断值是否存在
my_dict.setdefault("key", []).append("a") # 添加进去值
print("a" in my_dict['key']) # 判断值是否
tdict={'A':{1:['a','b'], 2:['C']}, 'B':{2:['a','b']} }
In [22]: tdict={}
In [23]: f=open('f1')
In [24]: while True:
...: line=f.readline().strip()
...: if not line:
...: break
...: pos1=line.split()[0]
...: pos2=line.s
可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,’abc’,4.56,[‘inner’,’list’],7-9j]
1.list(str):将str转换成list类型,str可以使字符串也可以是元组类型 2.aList.append(‘test’):追加元素到列表中去 3.del aList[1]:删除列表中下标为1的元素 del aList:删除整个列表 4.cmp(list1,list2):比较两个列表的大小 5.len(list):返回列表元素个数 6.sorted(list):使用字典序对列
背景是:多条跑道中都有对应的时间和速度,如何计算一段时间内所有跑道的平均速度?并添加到另外一个文件的新增列中。
文件1(data.csv)是月份总表,只有开始时间和结束时间。多个文件(12021-11-15.csv、22021-11-15.csv、32021-11-15.csv...)是日期表,只有一天的开始时间、结束时间、对应时刻速度。
多条跑道表中的数据如下(日期格式有两种):
1.data
2021-11-15 14:28:28
2021-11-15 14:38:2
在 Python 中,字典是一种数据结构,用于存储键值对。你可以使用花括号 {} 来创建一个字典,并使用冒号 : 来分隔键和值。例如,你可以创建一个字典来存储用户名和年龄:
user_ages = {'Alice': 35, 'Bob': 25, 'Eve': 28}
如果你想要创建一个空字典,你可以使用 `dict()` 函数。例如:
empty_dict = dict()
你还可以使用构造函数的方式来创建字典,例如:
user_ages = dict(Alice=35, Bob=25, Eve=28)
或者,你可以使用 `zip()` 函数来创建字典,例如:
names = ['Alice', 'Bob', 'Eve']
ages = [35, 25, 28]
user_ages = dict(zip(names, ages))
这些都是创建字典的方法,你可以根据需要使用不同的方法。
Python读取txt文本出现“ ‘gbk‘ codec can‘t decode byte 0xbf in position 2: illegal multibyte sequence”
67141