一木.溪桥学Python-06:元组tuple、字典dict

本文是一木.溪桥在Logic Education学习Python的基础课程,重点讲解了元组tuple和字典dict。元组是不可变序列,可以通过小括号创建,支持切片、count和index操作。字典是基于哈希实现的可变对象,采用键值对形式,支持增删改查等操作。文中还介绍了字典的多种创建方式及常用操作。

一木.溪桥 在Logic Education跟Amy学Python

12期:Python基础课
一木.溪桥学Python-06:元组tuple、字典dict
日期:2020年12月25日


学习目标:

  • 元组tuple
  • 字典dict

学习内容:

元组tuple

tuple介绍

元组也是 序列结构,但是是一种 不可变序列,你可以简单的理解为内容不可变的
列表。除了在内部元素不可修改的区别外,元组和列表的用法差不多。

tuple创建

1.创建一个元组,只要把 逗号 分隔的 不同的数据元素 使用 小括号 括起来即可。

tu = (1,2,3,4)

print(type(tu))

print(tu)
  • run:
    <class ‘tuple’>
    (1, 2, 3, 4)

2.通过 tuple() 来进行创建元组

tu = tuple("1234",)     

print(type(tu))

print(tu)
  • run:
    <class ‘tuple’>
    (‘1’, ‘2’, ‘3’, ‘4’)

  • tips

  1. 参数为可迭代对象,整数123不能作为参数,会报错。
    2.tuple只有一个元素时,后面加“,”
tuple操作
  • 使用方括号加下标访问元素
tu = tuple("hello!",)

print(tu[1])               # e
  • 切片(形成新元组对象)
tu = tuple("hello!",)

print(tu[::-1])               # ('!', 'o', 'l', 'l', 'e', 'h')
  • tuple.count() / tuple.index()
tu = tuple("hello!",)

print(tu.count("l"))               # 2

print(tu.index("e"))               # 1
  • python内置函数:reversed() 反转, sorted()排序

reversed() 反转

tu = tuple("hello!",)

print(list(reversed(tu)))               # ['!', 'o', 'l', 'l', 'e', 'h']

sorted()排序:升序

tu = tuple("147258369",)

print(list(sorted(tu)))               # ['1', '2', '3', '4', '5', '6', '7', '8', '9']

sorted()排序:降序

tu = tuple("147258369",)

print(list(sorted(tu, reverse=True)))               # ['9', '8', '7', '6', '5', '4', '3', '2', '1']
  • 加法
tu1 = tuple("123",)

tu2 = tuple("345",)

print(tu1 + tu2)               # ('1', '2', '3', '3', '4', '5')
  • 乘法
tu2 = tuple("345",)

print(3 * tu2)               # ('3', '4', '5', '3', '4', '5', '3', '4', '5')
不允许的操作
  • 不允许 修改 、新增 元素。(一级)
  • 不允许 删除 某个元素(但可以删除整个元组)
  • 实际上,元组没有任何会对内部元素发生 修改 动作的方法。例如,元组没有
    remove , append , pop 等方法
tuple、list转换
tu = tuple("123",)

print(list(tu))               # ['1', '2', '3']
li = ['1', '2', '3']

print(tuple(li))              # ('1', '2', '3')

字典dict

dict介绍

字典介绍 ( 掌握 )
Python 的字典数据类型是基于 hash 散列算法实现的,采用 键值对 (key:value) 的形
式,根据 key 的值计算 value 的地址,具有非常快的查取和插入速度。它是一种 可变
对象 ,所以支持修改、插入、删除等操作。

dict创建
  • 格式1:{ key1 : value1, key2 : value2}
  • tips:
  1. Python3.6 开始,字典对象会保持键值插入时的顺序,并且其包含的 元
    素个数不限,值的类型 也可以是其它任何数据类型。
  2. 字典的 key 必须是 不可变的对象,例如整数、字符串、bytes 和元组,但使
    用最多的还是字符串。 列表、字典、集合等就不可以作为 key。同时,同一
    个字典内的 key 必须是唯一 的,但值则不必。
dic = {"name": "DXD", "age": 20}

print(type(dic))        # <class 'dict'>

print(dic)              # {'name': 'DXD', 'age': 20}
  • 格式2:dict() 键值对
dic = dict(name="DXD", age=20)

print(dic)              # {'name': 'DXD', 'age': 20}
  • 格式3:映射
dic = dict([("name", "DXD"), ("age", 20)])

print(dic)              # {'name': 'DXD', 'age': 20}
字典创建拓展
  • map(func, *iterables):
    将 iterables 里面的元素逐个传到 func 里面做处理
li = list("12345")

print(list(map(int,li)))      # [1, 2, 3, 4, 5]

print(li)                     # ['1', '2', '3', '4', '5']
  • zip(iter1 [,iter2 […]]):
    将iter1 iter2 中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

zip() --> dict

li1 = list("12345")

li2 = list("abcde")

print(dict(zip(li1,li2)))      # {'1': 'a', '2': 'b', '3': 'c', '4': 'd', '5': 'e'}

zip() --> list

li1 = list("12345")

li2 = list("abcde")

print(list(zip(li1,li2)))      # [('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')]
dict访问

访问字典 ( 掌握 )
字典是 集合类型,不是序列类型,因此 没有索引下标 的概念,更 没有切片 的
说法。但是,与 list 类似,字典采用把 相应的键 放入 方括号 内获取 对应值 的
方式取值。
如:dic[exit_key]
思考:当 key 值不存在时,程序会怎么样呢?–> 报错

dict的增加与修改 ( 掌握 )
  • 增加 就是往字典 插入新的键值对
  • 修改 就是给 原有的键赋予新的值。由于一个 key 只能对应一个值,所以,多次对一个 key 赋值,后面- 的值会把前面的值 覆盖 掉。
dict删除 ( 掌握 )
  • 删除字典元素:del dic[exit_key] 或 dic.pop(exit_key)
  • 删除整个字典:del dic
  • 清空整个字典:dic.clear()
dic = dict(name="DXD", age=20)

print(dic.clear())           # None
dict常见操作 ( 熟悉 )
  • D.get(k[,d]) --> 返回指定键的值,如果值不在字典中,则返回 default 值
  • D.items() --> 以列表返回可遍历的 ( 键 , 值 ) 元组对
  • D.keys() --> 以列表返回字典所有的键
  • D.values() --> 以列表返回字典所有的值
dic = dict(name="DXD", age=20)

print(dic)              # {'name': 'DXD', 'age': 20}

print(dic.get('name'))  # DXD

print(dic.items())      # dict_items([('name', 'DXD'), ('age', 20)])

print(dic.keys())       # dict_keys(['name', 'age'])

print(dic.values())     # dict_values(['DXD', 20])

作业:

在这里插入图片描述
在这里插入图片描述


作业答案:

题1:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2020/12/27 21:17
# @Author  : 一木.溪桥
# @File   : 作业.py
# @Software: PyCharm

lis1 = ["name", "author", "introduce"]

lis2 = ["NORWEGIAN WOOD", "Haruki Murakami", "balalalalal..."]

print(dict(list(zip(lis1,lis2))))
  • run:
    {‘name’: ‘NORWEGIAN WOOD’, ‘author’: ‘Haruki Murakami’, ‘introduce’: ‘balalalalal…’}

题2:

Amy_info = {'name': 'amy', 'addr': 'hunan', 'weight': 90}

print(Amy_info.keys())

print(Amy_info.values())
  • run:
    dict_keys([‘name’, ‘addr’, ‘weight’])
    dict_values([‘amy’, ‘hunan’, 90])

题4:

bytes 转 str

bt = bytes("hello Amy!", encoding="utf")

s = bt.decode()

print(type(s))

print(s)
  • run:
    <class ‘str’>
    hello Amy!

str 转 bytes

s = "hello Amy!"

bt = s.encode()

print(type(bt))

print(bt)
  • run:
    <class ‘bytes’>
    b’hello Amy!’

<think>好的,我现在需要帮助用户解决在Linux上安装python-geohash时由于缺少wheel包而不得不使用legacy setup.py install的问题。用户希望避免这种情况,转而使用wheel包来安装。 首先,我得回忆下用户之前的对话历史。用户之前询问过如何在Linux安装python-geohash,我给出了步骤,包括安装依赖、使用pip安装,处理导入错误等。现在用户遇到了新的问题,涉及wheel包的缺失,导致pip回退到旧的安装方法。这可能是因为python-geohash没有提供预编译的wheel,或者用户的环境中没有安装wheel包,导致pip无法生成wheel,只能使用setup.py。 根据用户提供的引用内容,特别是引用[2]和[3],问题通常出现在项目缺少pyproject.toml且没有安装wheel包时,pip会使用旧的setup.py方式。解决方法可能包括安装wheel包,强制使用PEP 517标准,或者手动构建wheel。 首先,用户需要确保系统中已经安装了wheel包。根据引用[3],安装wheel可以避免使用legacy方法。所以在步骤里,应该先让用户安装wheel。命令是pip install wheel,如果用户使用Python3,可能需要用pip3。 然后,可能需要强制pip使用PEP 517模式,这可以通过--use-pep517选项实现,如引用[2]提到的。所以安装命令应该是pip install --use-pep517 python-geohash。不过,我需要确认这个选项是否适用于当前的情况,或者是否需要其他参数。 另外,用户可能遇到的情况是,即使安装了wheel,但python-geohash本身可能没有提供合适的配置,导致pip仍然无法生成wheel。这时候可能需要用户手动构建wheel。步骤包括下载源码包,使用python setup.py bdist_wheel生成wheel文件,然后安装。但这种方法需要用户先获取源码,可能稍微复杂,但可以作为备选方案。 另外,用户可能需要升级pip本身,因为旧版本的pip可能存在兼容性问题。所以建议用户先升级pip:pip install --upgrade pip。 此外,引用[4]提到另种安装方法是用python setup.py install,但用户想避免这个,所以重点应该放在如何让pip使用wheel。 可能的步骤总结: 1. 安装wheel包。 2. 升级pip到最新版本。 3. 使用--use-pep517选项安装。 4. 如果仍然失败,手动构建wheel。 另外,需要考虑Linux环境下可能的依赖问题,比如是否安装了编译所需的工具,如gcc、python-dev等,这些在之前的回答中已经提到,用户可能已经安装过了,但可能需要再次确认,避免编译时出错。 还要检查python-geohash的PyPI页面,看看它是否提供了wheel分发。如果官方没有提供wheel,那么用户可能需要从源码构建wheel,或者等待维护者提供。但根据用户的情况,可能需要手动处理。 最后,验证安装是否成功,用import geohash测试,如之前的步骤所示。 综上,分步骤的解决方案应包括安装wheel、升级pip、使用PEP 517,以及备选的手动构建方法,并确保系统依赖已安装。</think>### 分步解决方案 #### 步骤1: 安装或更新`wheel`包 Wheel是Python的二进制包格式,可避免使用`setup.py install`的旧安装方式。 ```bash pip install --upgrade wheel # 确保已安装最新版wheel # 若使用Python3且默认命令为pip3: pip3 install --upgrade wheel ``` #### 步骤2: 强制启用PEP 517模式 通过添加`--use-pep517`参数,强制pip使用现代构建系统(避免回退到`setup.py`)[^2]: ```bash pip install python-geohash --use-pep517 ``` #### 步骤3: 安装编译依赖(备用) 若仍提示构建失败,需确保系统已安装编译工具链: ```bash sudo apt-get update sudo apt-get install python3-dev gcc # 提供Python头文件和C编译器[^1] ``` #### 步骤4: 手动构建Wheel并安装(终极方案) 如果上述方法无效,可手动下载源码并构建Wheel: ```bash # 下载源码包 pip download python-geohash --no-binary :all: tar -xzf python-geohash-*.tar.gz # 解压源码 cd python-geohash-*/ # 生成Wheel文件 python setup.py bdist_wheel # 生成.whl文件 # 安装生成的Wheel pip install dist/*.whl # 自动使用二进制包 ``` #### 验证安装 ```python import geohash print(geohash.encode(39.9, 116.4)) # 预期输出类似'wx4g' ``` --- ### 关键问题解析 1. **为何强制使用PEP 517?** PEP 517定义了无需`setup.py`的构建标准,通过`pyproject.toml`声明构建依赖,避免传统安装方式的不稳定性。 2. **手动构建Wheel的作用** 当PyPI未提供预编译Wheel时(如某些库未适配Linux平台),手动构建可生成适配当前系统的二进制包,后续安装无需重复编译[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值