我有一个列表字典,每个列表都有不同数量的元素.我想将默认值添加到每个列表的开头,以使它们具有相同的大小.
所以,如果我从...开始
data = {'data1': [1,2,3], 'data2': [12,23,34,45,44], 'data3': [7,8,9,10], 'data4': [71, 72, 73, 74, 75, 76, 78], 'data5': []}
Run Code Online (Sandbox Code Playgroud)
我想最终得到:
data1: [0, 0, 0, 0, 1, 2, 3]
data2: [0, 0, 12, 23, 34, 45, 44]
data3: [0, 0, 0, 7, 8, 9, 10]
data4: [71, 72, 73, 74, 75, 76, 78]
data5: [0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
我想出了以下代码:
maxlen = 0
for d in data:
if maxlen < len(data[d]):
maxlen = len(data[d])
for d in data:
if len(data[d]) < maxlen:
data[d] = [0] * (maxlen - len(data[d])) + data[d]
Run Code Online (Sandbox Code Playgroud)
这有效,但是有更好的方法吗?
您可以找出哪个列表最长,然后在dict理解中用零填充其他每个列表.
>>> longest = max(len(i) for i in data.values())
>>> data = {key: [0]*(longest-len(value)) + value for key,value in data.items()}
>>> data
{'data5': [0, 0, 0, 0, 0, 0, 0],
'data1': [0, 0, 0, 0, 1, 2, 3],
'data4': [71, 72, 73, 74, 75, 76, 78],
'data3': [0, 0, 0, 7, 8, 9, 10],
'data2': [0, 0, 12, 23, 34, 45, 44]}
Run Code Online (Sandbox Code Playgroud)