Зачем продиктовать ту же петлю - PullRequest
0 голосов
/ 07 ноября 2018

Я новичок в Python.

Я извлекаю данные и сохраняю их в dict. При повторном цикле он заменяет мое первое значение ключа.

Вы можете найти выходные данные секунды Atfer match_chlDict, значение ключа "1" заменяется ключом "2".

У меня нет способа исправить это, пожалуйста, помогите. Спасибо.

Вот оригинал в match_details ['chl']

[{'LINENUM': '1', 'LINESTATUS': '0', 'LINEORDER': '1', 'LINE': '9.5', 'H': '100@1.75', 'L': '100@1.95'}, {'LINENUM': '2', 'LINESTATUS': '1', 'LINEORDER': '2', 'LINE': '10.5', 'H': '100@2.20', 'L': '100@1.59'}]

код

    match_chl={}
    match_chlDict={}
    for chl in match_details['chl']:          
        print("Current match_chlDict") 
        print(match_chlDict)
        match_chl['chlLINE']=chl['LINE']
        match_chl['chlH']=replace100(chl['H'])
        match_chl['chlL']=replace100(chl['L']) 
        #Write match_chl to dict by "LINENUM" as key                   
        match_chlDict[chl['LINENUM']]=match_chl    
        print("Atfer match_chlDict") 
        print(chl['LINENUM'])
        print(match_chlDict)

выход

Curr match_chlDict
{}

Atfer match_chlDict

1
{'1': {'chlLINE': '9.5', 'chlH': '1.75', 'chlL': '1.95'}}

Curr match_chlDict

{'1': {'chlLINE': '9.5', 'chlH': '1.75', 'chlL': '1.95'}}

Atfer match_chlDict

2
{'1': {'chlLINE': '10.5', 'chlH': '2.20', 'chlL': '1.59'}, '2': {'chlLINE': '10.5', 'chlH': '2.20', 'chlL': '1.59'}}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018
def replace100(str):
    return(str.replace("100@",""))

for chl in data:
    match_chl = {}
    match_chl['chlLINE'] = chl['LINE']
    match_chl['chlH'] = replace100(chl['H'])
    match_chl['chlL'] = replace100(chl['L'])
    match_chlDict[chl['LINENUM']] = match_chl
match_chlDict

Я не уверен, что вы ищете, но я думаю, что приведенный выше код работает, если вы хотите взять первый элемент в качестве ключа. Я думаю, возможно, ваша ошибка была в том, что вы сохранили значение в том же match_chl. Вы должны сбрасывать его значение при каждом запуске цикла.

0 голосов
/ 07 ноября 2018

Повторно инициализируйте match_chl={} каждый раз в цикле, иначе он заменит ссылку в вашем словаре.

match_chl = {}
match_chlDict = {}
for chl in m:
    print("Current match_chlDict")
    print(match_chlDict)
    match_chl['chlLINE'] = chl['LINE']
    match_chl['chlH'] = 'a'
    match_chl['chlL'] = 'b'
    match_chlDict[chl['LINENUM']] = match_chl
    print("Atfer match_chlDict")
    print(chl['LINENUM'])
    print(match_chlDict)
    match_chl = {}

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...