2015-04-06 3 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

+0

У вашего текстового редактора, вероятно, есть функция поиска и замены, или вы можете изменить его во время выполнения, распечатать в файл, а затем скопировать вставку. – Dannnno

+0

Действительно ли это json? –

ответ

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

+0

Жаль вас, я думаю, что я сказал не то. Я действительно хочу изменить во время выполнения, я думал, что вы имеете в виду что-то еще. Виноват. –

+0

Получение: словарь ['orderid'] = dictionary.pop ('id') KeyError: 'id' –

-1

Вы хотите использовать новый Dict напрямую, если нет, то:

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