Python 關於列表字典的鍵值修改


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 尚未實現的方法
SyntaxError Python 語法錯誤
IndentationError 縮進錯誤
TabError Tab 和空格混用
SystemError 一般的解釋器系統錯誤
TypeError 對類型無效的操作
ValueError 傳入無效的參數
UnicodeError Unicode 相關的錯誤
UnicodeDecodeError Unicode 解碼時的錯誤
UnicodeEncodeError Unicode 編碼時錯誤
UnicodeTranslateError Unicode 轉換時錯誤
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'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))
#字符串的格式為'bytes',不是需要'encode()'
  • shelve:打開文件的參數增加'writeback=True'防止寫入失敗
  • 支持字典
import shelve
f = shelve.open('c',writeback=True)  
#創建文件  
#writeback = True 回寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM