分享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