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 &gt; 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