Добавить новый элемент в список словарей, управляющих на основе других значений элемента - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть следующий список словарей, содержащих идентификатор домохозяйства (HID) для каждого года:

list_of_dicts = [{'HID':'1','year':'2017'},
                 {'HID':'1','year':'2018'},
                 {'HID':'2','year':'2017'},
                 {'HID':'2','year':'2018'},
                 {'HID':'3','year':'2017'},
                 {'HID':'3','year':'2018'}]

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

i = 0
for line in list_of_dicts:
    line['id'] = i

    i += 1

Однако, это заставляет элемент id работать непрерывно следующим образом:

list_of_dicts = [{'HID':'1','year':'2017','id':1},
                 {'HID':'1','year':'2018','id':2},
                 {'HID':'2','year':'2017','id':3},
                 {'HID':'2','year':'2018','id':4},
                 {'HID':'3','year':'2017','id':5},
                 {'HID':'3','year':'2018','id':6}]

Я хочу выделить одну и ту же числовую переменную id для каждого HID в течение каждого года, например:

list_of_dicts = [{'HID':'1','year':'2017','id':1},
                 {'HID':'1','year':'2018','id':1},
                 {'HID':'2','year':'2017','id':2},
                 {'HID':'2','year':'2018','id':2},
                 {'HID':'3','year':'2017','id':3},
                 {'HID':'3','year':'2018','id':3}]

Как контролировать распределение идентификаторов, чтобы оно было одинаковым для каждого домохозяйства в течение каждого года?

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Это то, что вы ищете?

list_of_dicts = [{'HID':'1','year':'2017'},
                 {'HID':'1','year':'2018'},
                 {'HID':'2','year':'2017'},
                 {'HID':'2','year':'2018'},
                 {'HID':'3','year':'2017'},
                 {'HID':'3','year':'2018'}]
for line in list_of_dicts:
    line['id'] = line['HID']

print(list_of_dicts)

Выходы:

[{'HID': '1', 'year': '2017', 'id': '1'}, {'HID': '1', 'year': '2018', 'id': '1'}, {'HID': '2', 'year': '2017', 'id': '2'}, {'HID': '2', 'year': '2018', 'id': '2'}, {'HID': '3', 'year': '2017', 'id': '3'}, {'HID': '3', 'year': '2018', 'id': '3'}]
0 голосов
/ 24 апреля 2018

В Python3 вы можете использовать понимание списка и распаковку словаря:

list_of_dicts = [{'HID':'1','year':'2017'},
             {'HID':'1','year':'2018'},
             {'HID':'2','year':'2017'},
             {'HID':'2','year':'2018'},
             {'HID':'3','year':'2017'},
             {'HID':'3','year':'2018'}]
new_data = [{**i, **{'id':i['HID']}} for i in list_of_dicts]

Выход:

[{'HID': '1', 'year': '2017', 'id': '1'}, {'HID': '1', 'year': '2018', 'id': '1'}, {'HID': '2', 'year': '2017', 'id': '2'}, {'HID': '2', 'year': '2018', 'id': '2'}, {'HID': '3', 'year': '2017', 'id': '3'}, {'HID': '3', 'year': '2018', 'id': '3'}]
0 голосов
/ 24 апреля 2018

Вы должны изменить это, чтобы не основываться на i.Вместо этого сделайте следующее:

for line in list_of_dicts:
    line['id'] = line['hid']

Таким образом, вы создадите новую запись id на основе hid для этой строки

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