无法重命名python列表中的字段(键,值结构)

时间:2015-12-11 08:45:53

标签: python list python-3.x dictionary

我的下面的列表包含嵌套列表(键,键值)

inp1=[{'id': 0, 'name': 98, 'value': 9}, {'id': 1, 'name': 66, 'value': 8}, {'id': 2, 'name': 29, 'value': 5}, {'id': 3, 'name': 99, 'value': 3}, {'id': 4, 'name': 15, 'value': 9}]     

我试图用'wid'替换'name',用'wrt'替换'value',我怎么能在同一个列表上呢?

我的输出应该像

inp1=[{'id': 0, 'wid': 98, 'wrt': 9}, {'id': 1, 'wid': 66, 'wrt': 8}, {'id': 2, 'wid': 29, 'wrt': 5}, {'id': 3, 'wid': 99, 'wrt': 3}, {'id': 4, 'wid': 15, 'wrt': 9}]     

我在下面尝试过,但它不起作用,因为列表不能用字符串索引但是整数

    inp1['name'] = inp1['wid']
    inp1['value'] = inp1['wrt']

我试过,如果我能找到任何例子,但大多数情况下我只发现这个字典而不是列表。

2 个答案:

答案 0 :(得分:2)

def f(item):
    if(item.has_key('name') and not item.has_key('wid')):
        item['wid']=item.pop('name')
    if(item.has_key('value') and not item.has_key('wrt')):
        item['wrt']=item.pop('value')
map(f,inp1)

输出:

[{'wrt': 9, 'wid': 98, 'id': 0}, {'wrt': 8, 'wid': 66, 'id': 1}, {'wrt': 5, 'wid': 29, 'id': 2}, {'wrt': 3, 'wid': 99, 'id': 3}, {'wrt': 9, 'wid': 15, 'id': 4}]

答案 1 :(得分:1)

您需要迭代每个项目,并删除旧条目(dict.pop对此很方便 - 它删除一个条目并返回值)并分配给新的密钥:

>>> inp1 = [
...     {'id': 0, 'name': 98, 'value': 9},
...     {'id': 1, 'name': 66, 'value': 8},
...     {'id': 2, 'name': 29, 'value': 5},
...     {'id': 3, 'name': 99, 'value': 3},
...     {'id': 4, 'name': 15, 'value': 9}
... ]
>>> 
>>> for d in inp1:
...     d['wid'] = d.pop('name')
...     d['wrt'] = d.pop('value')
... 
>>> inp1
[{'wid': 98, 'id': 0, 'wrt': 9},
 {'wid': 66, 'id': 1, 'wrt': 8},
 {'wid': 29, 'id': 2, 'wrt': 5},
 {'wid': 99, 'id': 3, 'wrt': 3},
 {'wid': 15, 'id': 4, 'wrt': 9}]