如何将特定项目从一个列表复制到另一个列表?我的原著是:
[
{
"values" : {
"val1" : 334,
"val2" : 994,
"val3" : 33,
"val4" : 345,
},
"filename": "image1.jpg",
},
{
"values" : {
"val1" : 567,
"val2" : 777,
"val3" : 787,
"val4" : 678,
},
"filename": "image2.jpg",
},
]
我希望我的新数组看起来像这样:
[
{
"index" : 0,
"filename": "image1.jpg",
"val1: 334,
"val3: 33,
},
{
"index" : 1,
"filename": "image2.jpg",
"val1: 567,
"val3: 787,
},
]
我已经尝试过了,但是没有用:
for (i, x) in original:
new.extend([{
"index" : i,
"filename" : x.filename,
"val1" : x.val1,
"val2" : x.val2,
}])
我要去哪里错了?
答案 0 :(得分:2)
类似这样的东西:
#!/usr/bin/python3
original=[
{
"values" : {
"val1" : 334,
"val2" : 994,
"val3" : 33,
"val4" : 345,
},
"filename": "image1.jpg",
},
{
"values" : {
"val1" : 567,
"val2" : 777,
"val3" : 787,
"val4" : 678,
},
"filename": "image2.jpg",
},
]
new=[]
for (i, x) in enumerate(original):
new.append({
"index" : i,
"filename" : x["filename"],
"val1" : x["values"]["val1"],
"val2" : x["values"]["val2"],
})
print(new)
答案 1 :(得分:1)
尝试这个:
def f(x):
y = []
for i, j in enumerate(x):
z = {}
z["index"] = i
z["filename"] = j["filename"]
for k, m in enumerate(j["values"]):
z[f"val{k + 1}"] = j["values"][m]
y.append(z)
return y
x = [
{
"values" : {
"val1" : 334,
"val2" : 994,
"val3" : 33,
"val4" : 345,
},
"filename": "image1.jpg",
},
{
"values" : {
"val1" : 567,
"val2" : 777,
"val3" : 787,
"val4" : 678,
},
"filename": "image2.jpg",
},
]
print(f(x))
答案 2 :(得分:1)
首先,假设您的original
是顶部列表,则需要枚举它,而不是像字典一样进行迭代。接下来,如果您查看输入内容,则值实际上位于第二层。
您的代码应如下所示:
transformed_dicts = []
for i, orig_dict in enumerate(original):
transformed = {
'index': i,
'filename': orig_dict['filename'],
'val1': orig_dict['values']['val1'],
'val3': orig_dict['values']['val3'],
}
transformed_dicts.append(transformed)
您可以“重构”此列表以使用列表理解功能,但我认为这种方式更具可读性。
答案 3 :(得分:1)
我几乎给出了与Mayhem相同的答案,但请注意,即使示例代码获得了val3
,问题中仍要求使用val2
。我敢肯定这不是一个破坏交易的人。我使用(可能是滥用了)列表理解而不是循环。
result = [{'index': i,
'filename': val['filename'],
'val1': val['values']['val1'],
'val3': val['values']['val3']
} for i, val in enumerate(original)]
print(result)
输出为:
[{'index':0,'filename':'image1.jpg','val1':334,'val3':33}, {'index':1,'filename':'image2.jpg','val1':567,'val3':787}]
答案 4 :(得分:0)
我会说您在使用2个变量遍历列表时出了错。
我建议的解决方案如下:
records = []
index = 0
for i in original:
record = {'index': index,
'filename': i['filename'],
'val1': i['values']['val1'],
'val3': i['values']['val3']}
index += 1
records.append(record)