我有四個特殊字串串列,例如“?”。我將它們作為鍵 1 到 4 的值存盤在字典中。
我正在嘗試遍歷每個字典串列中的所有專案,然后將每個值更新為其 utf-8 編碼的等效項。這是我到目前為止所擁有的:
li1 = ['€','?','?','?','…','?','?','‰']
li2 = ['?','?','?','?']
li3 = ['‘','’','“','”','?','–','—','?','?']
li4 = ['?','?','?','?','?']
uni_dic = {
'1':li1,
'2':li2,
'3':li3,
'4':li4
}
for key in uni_dic:
for val in uni_dic[key]:
uni_dic.update({key,val.encode('utf-8')})
這將回傳一個 'ValueError: 字典更新序列元素 #0 的長度為 1;2 是必需的'
uj5u.com熱心網友回復:
取出最后三行并寫下:
for key, values in uni_dic.items():
uni_dic[key] = [string.encode('utf-8') for string in values]
或在一行中:
uni_dic = {key: [string.encode('utf-8') for string in uni_dic[key]] for key in uni_dic}
uni_dic}
uj5u.com熱心網友回復:
在這種情況下,您可以創建另一個串列,如下所示:
for key in uni_dic:
uni_dic[key] = [val.encode('utf-8') for val in uni_dic[key]]
如果您想就地執行此操作:
for key in uni_dic:
for idx, val in enumerate(uni_dic[key]):
uni_dic[key][idx] = val.encode('utf-8')
uj5u.com熱心網友回復:
語法錯誤是您將更新字典指定為{key,val.encode('utf-8')}(實際上是 a set)而不是{key: val.encode('utf-8')}. 但是,無論如何使用更新單個鍵有點愚蠢update,而且它們是回圈遍歷串列的方式,您只需依次用每個元素重復覆寫串列(最終以最后一項結束)。
相反,從編碼值構建一個新串列,并將整個串列分配給uni_dic[key]:
for key in uni_dic:
encoded_vals = []
for val in uni_dic[key]:
encoded_vals.append(val.encode('utf-8'))
uni_dic[key] = encoded_vals
使用串列推導構建encoded_vals可以讓您更加簡潔:
for key in uni_dic:
uni_dic[key] = [val.encode('utf-8') for val in uni_dic[key]]
并且使用字典推導dict.items()使其更加簡單:
uni_dic = {k: [val.encode('utf-8') for val in v] for k, v in uni_dic.items()}
uj5u.com熱心網友回復:
您的問題的單行解決方案是:
uni_dic = {key:[val.encode('utf-8') for val in charList] for key, charList in uni_dic.items()}
要對問題中的代碼進行最少修改即可獲得相同的結果,您可以這樣做:
li1 = ['€','?','?','?','…','?','?','‰']
li2 = ['?','?','?','?']
li3 = ['‘','’','“','”','?','–','—','?','?']
li4 = ['?','?','?','?','?']
uni_dic = {
'1':li1,
'2':li2,
'3':li3,
'4':li4
}
for key in uni_dic:
charList = uni_dic[key]
for i, val in enumerate(charList):
charList[i] = val.encode('utf-8')
[print(charList) for charList in uni_dic.values()]
輸出:
[b'\xe2\x82\xac', b'\xe2\x80\x9a', b'\xc6\x92', b'\xe2\x80\x9e', b'\xe2\x80\xa6', b'\xe2\x80\xa0', b'\xcb\x86', b'\xe2\x80\xb0']
[b'\xc5\xa0', b'\xe2\x80\xb9', b'\xc5\x92', b'\xc5\xbd']
[b'\xe2\x80\x98', b'\xe2\x80\x99', b'\xe2\x80\x9c', b'\xe2\x80\x9d', b'\xe2\x80\xa2', b'\xe2\x80\x93', b'\xe2\x80\x94', b'\xcb\x9c', b'\xe2\x84\xa2']
[b'\xc5\xa1', b'\xe2\x80\xba', b'\xc5\x93', b'\xc5\xbe', b'\xc5\xb8']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447810.html
上一篇:將資訊從一本字典復制到新字典
