首页 > 编程语言 >分享13个非常有用的python代码片段

分享13个非常有用的python代码片段

时间:2022-10-06 18:55:05浏览次数:50  
标签:13 python list 片段 列表 dict key print 字典

分享13个非常有用的python代码片段

lists snippets

我们先从最常用的数据结构列表开始

1\将两个列表合并成一个字典
假设我们在python中有两个列表,我们希望将它们合并成为字典形式,其中一个列表的项作为字典的键,
另一个作为值.这是在用python编写代码时经常遇到的一个非常常见的问题.

keys_list = ['a', 'b', 'c']
values_list = ['red', 'black', 'white', 'pur']

#  way1 不管values键比key键多或少,都可以匹配
dict_method_1 = dict(zip(keys_list, values_list))
print(dict_method_1)  # {'a': 'red', 'b': 'black', 'c': 'white'}

# way2 字典表达式
dict_method_2 = {key: value for key, value in zip(keys_list, values_list)}
print(dict_method_2)  # {'a': 'red', 'b': 'black', 'c': 'white'}

# way3 遍历取值
items_tuple = zip(keys_list, values_list)
dict_method_3 = {}
for key, value in items_tuple:
    if key not in dict_method_3:
        dict_method_3[key] = value
print(dict_method_3)  # {'a': 'red', 'b': 'black', 'c': 'white'}

2\将两个或者多个列表合并成一个包含列表的列表
当我们遇到两个或者更多列表时,我们希望将它们全部收集到一个大列表中.
其中较小列表的所有第一项构成较大列表的第一个列表.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c', 'd']
list3 = ['x', 'y', 'z', '0', 'k']

list_merge = []
for i in zip(list1, list2, list3):  # 还是遍历取值
    a, b, c = i
    list_merge.append([a, b, c])
print(list_merge)  # [[1, 'a', 'x'], [2, 'b', 'y'], [3, 'c', 'z']]

3\对字典列表进行排序
列表中包含字典,如何对列表字典进行排序.

# 对字典列表进行排序
dict_lists = [{'name': 'jack', 'age': 20}, {'name': 'asj', 'age': 14}, {'name': 'xia', 'age': 55}]

# way1  用列表的sort方法,字典的get方法,lambda函数,reverse,实现按将列表中字典的key,value正反排序
dict_lists.sort(key=lambda i: i.get("age"), reverse=True)
print(dict_lists)
# 结果[{'name': 'xia', 'age': 55}, {'name': 'jack', 'age': 20}, {'name': 'asj', 'age': 14}]
dict_lists.sort(key=lambda i: i.get("name"), reverse=False)
print(dict_lists)
# 结果 [{'name': 'asj', 'age': 14}, {'name': 'jack', 'age': 20}, {'name': 'xia', 'age': 55}]

# way2
from operator import itemgetter
f = itemgetter("age")
dict_lists.sort(key=f)
print(dict_lists)
# 结果 [{'name': 'asj', 'age': 14}, {'name': 'jack', 'age': 20}, {'name': 'xia', 'age': 55}]

4\对字符串列表进行排序
我们经常面临包含字典串的列表,需要按字典顺序\长度或者其他要求进行排序

my_list = ["blue", "red", "green"]

# way1  用列表的sort方法 或者sorted内置函数
my_list.sort()  # 默认按元素名进行排序
print(my_list)  # ['blue', 'green', 'red']
my_list = sorted(my_list, key=len, reverse=True)
print(my_list)  # ['green', 'blue', 'red']

# way2 用locale  functools
import locale
from functools import cmp_to_key

my_list = sorted(my_list, key=cmp_to_key(locale.strcoll))
print(my_list)

5\根据另一个列表对列表进行排序
有时,我们可能需要使用一个列表来对另一个列表进行排序,因此,我们将有一个数字列表索引和
一个我们想使用这些索引来进行排序的列表

a = ['blue', 'green', 'orange', 'purple', 'yellow']
b = [3, 2, 5, 1, 4]
# 方法就是将两个表zip, 排序,生成字典后取出volue.
bb = []
for i in dict(sorted(zip(b, a))).values():
    bb.append(i)
print(bb)  # ['purple', 'green', 'blue', 'yellow', 'orange']

cc = [colo for _, colo in sorted(zip(b, a))]
print(cc)  # ['purple', 'green', 'blue', 'yellow', 'orange']

6\将列表映射到字典
如果给定一个列表并将其映射到字典中,也就是说,我们想将我们的列表转换为带有数字键的字典

mylist = ['blue', 'orange', 'green']
fn = [i for i in range(1,4)]
dict_map = dict(zip(fn,mylist))
print(dict_map)  # {1: 'blue', 2: 'orange', 3: 'green'}

Dictionary Snippets

现在处理的数据类型是字典

7\合并两个或者多个字典

dic1 = {'a':1, 'b':2, 'c':3}
dic2 = {'c':4, 'd':5, 'e':6}
dic_merge = {}
for key in dic1:
    if key not in dic_merge:
        dic_merge[key] = dic1.get(key)

for key in dic2:
    if key not in dic_merge:
        dic_merge[key] = dic2.get(key)
        
print(dic_merge)  # {'a': 1, 'b': 2, 'c': 3, 'd': 5, 'e': 6}

8\反转字典
一个非常常见的字典任务是如果我们有一个字典并且想要翻转它的键和值,键将成为值,而值将成为键
当我们这样做时,我们需要确保没有重复的键。值可以重复,但键不能,并确保所有新键都是可以 hashable 的

my_dict = {'a': 1, 'b': 2, 'c': 3}

# way1  value不重复,直接颠倒reversed
my_dict_inverted = dict(map(reversed, my_dict.items()))
print(my_dict_inverted)  # {1: 'a', 2: 'b', 3: 'c'}

# way2 如果有重复的value不能转成key
new_dic = {}
for key in my_dict:
    if my_dict[key] not in new_dic:
        new_dic[my_dict[key]] = key
print(new_dic)  # {1: 'a', 2: 'b', 3: 'c'}

String Snippets

接下来是字符串的处理

9\使用f字符串
格式化字符串可能是我们几乎每天都需要完成的一项任务,
在 Python 中有多种方法可以格式化字符串,使用 f 字符串是比较好的选择

# 格式化
goods = 'book'
price = 15
count = 3
print(f'商品名称:{goods}', f'采购数量为{count}, 采购金额为{count * price}')
#  商品名称:book 采购数量为3, 采购金额为45

# float
price_2 = 5.18362
print(f'价格{price_2:.2f}')  # 价格5.18

# 日期
from datetime import datetime
date = datetime.utcnow()
print(f'{date = :%Y-%m-%d %H:%M}')  # date = 2022-10-06 10:15

10\检查子串
一项非常常见的任务就是检查字符串是否在于字符串列表中

addresses = ["123 Elm Street", "531 Oak Street", "678 Maple Street"]
street = "Elm Street"

# way1 使用find方法
for address in addresses:
    if address.find(street) >= 0:
        print(address)  # 123 Elm Street

# way2 使用in 关键字
for address in addresses:
    if street in address:
        print(address)  # 123 Elm Street


11\以字节为单位获取字符串的大小
有时,尤其是在构建内存关键应用程序时,我们需要知道我们的字符串使用了多少内存

str1 = 'hello world!'
str2 = 'dock'

def str_size(s):
    return len(s.encode("utf-8"))


print(str_size(str1))  # 12
print(str_size(str2))  # 4

Input/ Output operations

最后我们来看看输入输出方面的代码片段

12\检查文件是否存在
应用程序中,我们经常需要从文件中读取数据或向其中写入数据,
但要做到这一点,我们需要检查文件是否存在,因此,我们需要确保代码
不会因 IO 错误而终止

# way1  使用os模块
import os
exists = os.path.isfile("/path/to/file")

# way2 使用pathlib模块
from pathlib import Path
config = Path("/path/to/file")
if config.is_file():
    pass


13\解析电子表格
另一种非常常见的文件交互是从电子表格中解析数据,
我们使用 CSV 模块来帮助我们有效地执行该任务

import csv
csv_list = []
with open("path/to/file", 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f, dialect=',')  # 将excel文件导入内存csv_reader
    line_count = 0
    for line in csv_reader:  # 逐行读
        if line_count == 0:
            header = line
        else:
            row_dict = {key: value for key, value in zip(header, line)}
            csv_list.append(row_dict)  # 存入字典
        line_count += 1

标签:13,python,list,片段,列表,dict,key,print,字典
From: https://www.cnblogs.com/leeyong49/p/16758199.html

相关文章

  • python session手动添加cookies键值并保持
    importrequestsses=requests.session()requests.utils.add_dict_to_cookiejar(ses.cookies,{"sessionid":"04r6wd81ew8egds5e8d16fe8g45s"})headers={'user-agen......
  • DeepMind Lab的一些python例子—————(Ubuntu22.04系统安装DeepMind Lab)后续
    相关资料:Ubuntu22.04系统安装DeepMindLab ======================================================  importdeepmind_labimportnumpyasnp#Createane......
  • python 列表
    1.基本语法#字面量[元素1,元素2,元素3,元素4,...]#定义变量变量名字=[元素1,元素2,元素3,元素4,...]#定义空列表变量名字=[]变量名字=list()列表内的每个数据,......
  • python 创建虚拟环境
    1、安装virtualenv库pipinstallvirtualenv2、创建虚拟环境virtualenv[虚拟环境名称]virtualenvvenv#如果不想使用系统的包,加上–no-site-packeages参数v......
  • python 数据容器
    python中的数据容器一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,每个元素,可以是任意类型的数据,如字符串,数字,布尔等。数据容器更具特点不同,如:是否支......
  • python
    1.计算机基础知识2.python基础3.流程控制4.数据类型内置方法5.文件操作......
  • 【python】采集可爱猫咪数据并作可视化
    前言嗨喽~大家好呀,这里是魔王呐!环境介绍:python3.6pycharm爬虫部分使用模块:csvrequests>>>pipinstallrequestsparsel如何安装python第三方......
  • P1395 会议[树]
    会议题目描述有一个村庄居住着\(n\)个村民,有\(n-1\)条路径使得这\(n\)个村民的家联通,每条路径的长度都为\(1\)。现在村长希望在某个村民家中召开一场会议,村长希望......
  • 双目测距python实现
    实验步骤:1.相机标定(在Matlab中完成);2.立体校正;3.立体匹配;采用SGBM立体匹配算法进行视差计算4.深度图计算;得到视差图后,就可以计算目标点的深度值,也就是目标点离相机的实......
  • Matlab双目相机标定参数--python
    为了以后便于查看和学习,在此记录一下。我使用的是单USB双目摄像头,分辨率2560*720。在Matlab中标定好的参数写入Pycharm中,以进行后续处理。 注意事项:在填写相机内参时要......