如何修改列表中的多个项目?

2024-05-20 18:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想修改列表中的两件事。 id必须变成V1,而field1必须变成A。之后,我想制作一个数据帧,只包含the_list中的字典。这是我的预期结果:

    V1    -     A
0   1     -     1
1   2     -     2
2   3     -     3
3   4     -     4

这是我的列表

the_list = [['www.url1.com)', 1429, [{'id': 1, 'field1': None}, 
{'id': 2, 'field1': None}], 'www.url2.com'],  ['www.url1.com)', 1429, 
[{'id': 3, 'field1': None}, {'id': 4, 'field1': None}]]]

这是我当前的代码:

for n, i in enumerate(the_list):
    if i == 'id':
        the_list[n] = 'V1'
    if i == 'field1':
        the_list[n] = 'A'
    
#print(the_list)

df1 = pd.DataFrame(the_list[2])

#print(df)

我没有收到任何错误,我的输出与the_list的当前状态相同


Tags: the数据comnoneid列表if字典
2条回答

最好递归地更改它以避免错误,或者可以使用重命名方法

the_list = [['www.url1.com)', 1429, [{'id': 1, 'field1': None}, 
{'id': 2, 'field1': None}], 'www.url2.com'],  ['www.url1.com)', 1429, 
[{'id': 3, 'field1': None}, {'id': 4, 'field1': None}]]]

def recursiveChange(the_list_tmp):
    for n, i in enumerate(the_list_tmp):
        if isinstance(i, list):
            the_list_tmp[n] = recursiveChange(i)
            continue
        if isinstance(i, dict):
            if 'id' in i:
                the_list_tmp[n]['V1'] = i['id']
                del the_list_tmp[n]['id']
                
            if 'field1' in i :
                the_list_tmp[n]['A'] = i['field1']
                del the_list_tmp[n]['field1'] 
        else:
            the_list_tmp[n] = i
    return the_list_tmp
    
the_list = recursiveChange(the_list)
print(the_list)

**OR**


the_list = [['www.url1.com)', 1429, [{'id': 1, 'field1': None}, 
{'id': 2, 'field1': None}], 'www.url2.com'],  ['www.url1.com)', 1429, 
[{'id': 3, 'field1': None}, {'id': 4, 'field1': None}]]]

df =  pd.DataFrame(the_list[0][2]).rename(columns={'id': 'V1', 'field1': 'A'})
print(df)

您可以创建一个列表并将其传递给df构造函数

df = pd.DataFrame([
    list(each_dict.values())
    for complex in the_list
    for each_dict in complex[2]
    ], columns=['V1', 'A'])
    
print(df)

   V1     A
0   1  None
1   2  None
2   3  None
3   4  None

注意所有的field1值都是None,因此它们被读取到df中

相关问题 更多 >