如何将bytearray的内容复制到列表(Python)?

时间:2013-05-30 18:42:49

标签: python dictionary python-3.x bytearray

我有一个字典,我转换为bytearray,因为bytearrays是不可变的(无法修改)我尝试使列表等于bytearray中的每个索引。

a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = []

for i in b:
    c[i] = b[i]     # Error on this line

print(str(c))

问题是它一直打印IndexError: bytearray index out of range bytearray如何以及为何超出范围?

3 个答案:

答案 0 :(得分:5)

如果我正确理解了您的问题,您只需使用c = list(b)

即可
a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = list(b)

print(c)

输出:

[123, 49, 58, 32, 39, 97, 39, 44, 
 32, 50, 58, 32, 39, 98, 39, 44, 
 32, 51, 58, 32, 39, 99, 39, 125]

要了解导致此错误的原因,请参阅此answer

答案 1 :(得分:4)

ib 中的而不是索引

b = [1,5,20]
for i in b:
   print i #prints 1,then 5 , then 20

答案 2 :(得分:1)

修复您的代码:

a = {1:'a', 2:'b', 3:'c'}
b = bytearray(str(a), 'ASCII')
c = []

for i in b:
    c.append(i) 

或者,更好的是,你可以直接使用list构造函数的字节数组并放弃循环:

c=list(b)

或者,跳过字节数组并使用列表解析:

c= [ord(ch) for ch in str(a)]

在所有这些情况下,如果这是您的目标,您将获得ASCII序列列表:

[123, 49, 58, 32, 39, 97, 39, 44, 32, 50, 58, 32, 39, 98, 39, 44, 32, 51, 58, 32, 39, 99, 39, 125]