2015-04-06 60 views
-1

我有一个包含多个字典的文件,每行一个。 他们都有相同的密钥。我想在所有这些中将一个关键字从'id'重命名为'orderid'。什么是最有效的方式呢?在多个字典中重命名密钥

的样本数据:

{'total_ex_tax': '11.0000', 'is_deleted': False, 'status_id': 5, 'id': 614534} 
{'total_ex_tax': '100.0000', 'is_deleted': False, 'status_id': 5, 'id': 614535} 

到目前为止的代码:

def popAndMergeDicts(dicts): 

    dictLine = ast.literal_eval(dicts) 
    tempDict = dictLine['billing_address'] 
    del dictLine['billing_address'] 
    for i in tempDict: 
     dictLine[i] = tempDict[i] 
    # insertOrdersInDatabase(dictLine) 
    rename_id(dictLine) 
    return dictLine 


def rename_id(dictionary): 

    pass 


def process_orders_file(filename): 

    lines = tuple(open(filename)) 
    for line in lines[0:]: 
     popAndMergeDicts(line) 

process_orders_file('allOrdersData') 
+0

你要编辑文件中的文字?还是你想在运行时动态改变名称?如果是这样,为什么? – Dannnno 2015-04-06 04:28:37

+0

您的文本编辑器可能具有查找和替换功能,或者您可以在运行时更改它,打印到文件,然后复制粘贴 – Dannnno 2015-04-06 04:35:17

+0

这是json吗? – 2015-04-06 04:54:12

回答

0

这是微不足道的:

def rename_id(dictionary): 
    try: 
     dictionary['new_key'] = dictionary.pop('old_key') 
    except KeyError: 
     # 'old_key' is not present in dictionary. 
     if not dictionary.has_key('new_key'): 
      raise KeyError('This dictionary is missing "old_key": %s' % 
          dictionary) 

如果KeyError提高,搜索文件的错误造成的字典并根据需要进行更正。

+0

他需要编辑问题。该问题要求提供'rename_id'的代码。为什么还有问题中的代码呢? – dbliss 2015-04-06 04:37:11

+0

对不起,我想我说错了。我真的想在运行时改变,我以为你的意思是别的。我的错。 – 2015-04-06 04:37:31

+0

得到这个:dictionary ['orderid'] = dictionary.pop('id') KeyError:'id' – 2015-04-06 04:41:18

-1

你想直接使用新的字典,如果没有的话:如果你想使用它作为字典

with open("input.txt") as f: 
    for line in f: 
     print(line.strip().replace("id", "orderid")) 

,那么你可以尝试:

import ast 
with open("input.txt") as f: 
    for line in f: 
     mydict = ast.literal_eval(line.strip()) 
     mydict["ordeid"] = mydict.pop("id") 
     # use mydict 
+0

这不会取代单词id的任何出现,而不仅仅是那些特定的? – Dannnno 2015-04-06 04:36:58