Python 关于列表字典的键值修改

摘要:
当列表在列表中循环时,最好不要更改原始列表的大小,这会影响最终结果。#使用负索引修改列表printlis=[11,22,33,44,55]printfornuminrange:ifnum%2!

list (修改列表的索引值)

循环一个列表时,最好不要对原列表有改变大小的操作,这样会影响你的最终结果。

#使用负索引进行修改列表
print('First')
lis = [11, 22, 33, 44, 55]
print(lis)
for num in range(len(lis)-1,-1,-1):
    if num % 2 != 0: 
        lis.pop(num)
else:
    print(lis)
#使用步长进行修改列表
print('Second')
lis = [11, 22, 33, 44, 55]
print(lis)
del lis[1::2]
print(lis)
#添加新的列表进行修改
print('Third')
lis = [11, 22, 33, 44, 55]
print(lis)
new_lis = list()
for num in range(len(lis)):
    if num % 2 == 0: 
        new_lis.append(lis[num])
else:
    lis = new_lis
print(lis)

dict

在循环中不可以改变字典的键值对(增加、删除)

RuntimeError: dictionary changed size during iteration

dict.fromkeys()

dic = {'k1': 'v1', 'k2': 'v2', 'name': 'alex'}

错误的示范
for key in dic:
    if 'k' in key:
        dic.pop(key)
print(dic)
修改字典的内容需要把修改的键加入到空列表然后遍历修改字典的值
l1 = list()
for key in dic:
    if 'k' in key:
        l1.append(key)
print(l1)
for key in l1:
    dic.pop(key)
print(dic)

ValueError: unknown locale: UTF-8

File "/Users/wyl/Documents/effectmatrix/program/minetest/MCEdit-Unified-master/ENV/lib/python2.7/locale.py", line 545, in getdefaultlocale

    return _parse_localename(localename)

  File "/Users/wyl/Documents/effectmatrix/program/minetest/MCEdit-Unified-master/ENV/lib/python2.7/locale.py", line 477, in _parse_localename

    raise ValueError, 'unknown locale: %s' % localename

ValueError: unknown locale: UTF-8

解决方法:

1.在.bash_profile文件中加入 
export LANG="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"

2.source 使用更新后的内容
source .bash_profile

测试
python -c 'import locale; print(locale.getdefaultlocale());'

异常处理

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
LookupError无效数据查询的基类
IndexError序列中没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

序列化注意事项:

  • json: 传入传出为字符串
  • 文件打开使用'r'模式
  • 只能写一行
  • 只支持字典
json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
#sort_keys 排序
#indent 缩进
#separators 分隔符
#ensure_ascii 支持中文
  • pickle:传入传出为bytes类型
  • 文件打开使用'rb'模式
  • 支持任意类型
print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.'))
#字符串的格式为'bytes',不是需要'encode()'
  • shelve:打开文件的参数增加'writeback=True'防止写入失败
  • 支持字典
import shelve
f = shelve.open('c',writeback=True)  
#创建文件  
#writeback = True 回写

免责声明:文章转载自《Python 关于列表字典的键值修改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gunicorn的作用C#中几种换行符下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python,environ解惑

最近又遇到了对环境变量读取的问题,以前的学习很快会忘记~ 还是写篇博客稍微记录下比较好 首先我们都应该知道在平常的开发中我们经常会配置一些系统环境变量。 不论是windows系统或者是linux系统,比如: # Windows set test=123 # Linux export test=123 再而我们在进行web开发的时候也会遇到各种,变量的控...

Linux系统BTC挖矿傻瓜教程

【Linux系统BTC/比特币矿池挖矿方案一】cgminer矿池挖矿程序(Linux系统 比特币(BTC) 矿池挖矿/采矿/造币)cgminer矿池挖矿程序【查看这里有没有最新版】http://ck.kolivas.org/apps/cgminer/https://github.com/ckolivas/cgminer apt-get install bz...

python 之 数据库(修改表、复制表、删除表、单表查询)

10.8 修改表、复制表、删除表 10.81 修改表 alter table 1. 修改表名 alter table表名 rename 新表名; 2. 增加字段 alter table 表名 add 字段名 数据类型 [完整性约束条件…]; alter table t1 add stu char(10) not nullafter name;...

python标准库介绍——32 Queue 模块详解

Queue 模块 ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示. 你可以通过它在多个线程里安全访问同个对象. ====Example 3-2. 使用 Queue 模块====[eg-3-2] ``` File: queue-example-1.py...

3、Python字符编码区分utf-8和utf-8-sig

Python 读取文件首行多了"ufeff"字符串 python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错: Traceback (most recent call last): A File "E:/python project/multiProcess/test.py", line 32, in <mo...

用python调用caffe时出错:AttributeError: 'module' object has no attribute 'bool_'

由于用caffe的时候需要将/somepath/your_caffe/python include进来作为环境变量,但是caffe中有个io.py和numpy的io冲突,所以导致这种现象。 下面给出了一种解决方法,即对有冲突的io文件进行重命名: numpyのioとPyCaffeのio.pyが競合するようです。(Strange Issue using Py...